Mongodb 在多次更新中,$isolated能否停止按自然顺序读取已更改的文档?

Mongodb 在多次更新中,$isolated能否停止按自然顺序读取已更改的文档?,mongodb,Mongodb,从这个问题开始:我有一个相关的问题 有人指出,注释中的$isolated,实际上可以阻止MongoDB读取由多次更新引起的移动文档 我的主要争论点是$isolated页面上的警报,其中指出: $isolated isolation运算符不为写操作提供“全部或无”原子性 因此,它不会首先写入内存中的静态视图,$isolated仅仅是停止交织操作,而不是停止在多次更新调用中获取已经更新的文档(通过相同的操作),从我所看到的情况来看,它没有提供所需的原子性和隔离性 那么,$isolated如何在这里解

从这个问题开始:我有一个相关的问题

有人指出,注释中的
$isolated
,实际上可以阻止MongoDB读取由多次更新引起的移动文档

我的主要争论点是
$isolated
页面上的警报,其中指出:

$isolated isolation运算符不为写操作提供“全部或无”原子性

因此,它不会首先写入内存中的静态视图,
$isolated
仅仅是停止交织操作,而不是停止在多次更新调用中获取已经更新的文档(通过相同的操作),从我所看到的情况来看,它没有提供所需的原子性和隔离性


那么,
$isolated
如何在这里解决相关的OPs问题呢?

$isolated
在写入完成或遇到错误之前一直接受写入锁定,并且在处理过程中不会产生锁定。这将防止其他读取和写入。它不提供全部或全部原子性,因为如果32756文档发生错误,则之前的32755更新将保留。没有回滚;更新不是原子的。更新是隔离的


但是,这对OP没有帮助,因为是他自己的更新移动了文档(通过
$push
)并导致它们被点击两次。对索引字段使用排序;你总是有
\u id

啊,我仍然很困惑,在没有其他操作同时运行的情况下运行更新操作有什么不同?它如何确保在它从MongoDB数据文件中批量读取数据时,不会因为移动了文档而以自然排序方式拾取重复记录?据我所知,写锁不会阻止文档正确移动?嗯……你知道我认为你是对的,我混淆了这个问题。我将在这里更新答案,并对原始答案发表(另一)评论。