我们有一个客户端连续写入两个文档(带有{w:1}
)。例如,原始文件可能是:
{_id: "a", value: 0}
,
{_id: "b", value: 0}
并且客户端将文档“a”更新为{_id: "a", value: 1}
,然后在更新完成后,客户端将文档“b”更新为{_id: "b", value: 1}
。
第二个客户find({})
随后打电话。第二个客户端从辅助客户端读取,可能尚未收到所有更改。显然它可以读取以下状态:
{_id:"a",value:0}
,{_id:"b",value:0}
{_id:"a",value:1}
,{_id:"b",value:0}
{_id:"a",value:1}
,{_id:"b",value:1}
这是主要的“真实”状态(在过去的某个时刻)。
第二个客户可以看到如下状态:{_id:"a",value:0}
, {_id:"b",value:1}
? 请注意,此状态在主节点上从未存在过。
PS这里的解释说:
辅助节点...按照它们在 oplog 中出现的顺序应用写操作。
这是否意味着辅助节点按照它们在主节点上更新的顺序更改他们的文档?
PSfind
游标是否“冻结”了它们正在阅读的文档的状态(即忽略创建游标后所做的更改)?如果我使用find(...).sort({_id:-1})
或者如果文档“a”的 id 是“c”(即大于“b”),情况会有所不同吗?
谢谢