MongoDB聚合游标是否返回聚合启动后插入的文档?
MongoDB聚合游标是否会返回启动后插入的文档?
答案分以下几种情况:
默认非事务场景(读已提交隔离级别):
聚合游标不会完全基于启动时的快照工作,但也不会返回所有后续插入的文档:- 单集合聚合(未使用
$out/$merge阶段):初始数据扫描从命令执行时的集合状态开始,但在游标迭代过程中,如果有新的符合条件的文档被提交写入,游标可能会看到这些新文档——这取决于WiredTiger存储引擎的多版本并发控制机制。 - 使用
$out或$merge阶段的聚合:这类操作会生成最终结果集并写入指定集合,返回的游标仅包含聚合执行完成时的结果,不会包含后续插入的文档。
- 单集合聚合(未使用
事务内执行聚合:
这种情况下游标严格基于事务启动时的快照工作,不会返回聚合命令启动后插入的任何文档,直到事务提交或回滚。显式指定
snapshot读关注点:
若给聚合命令添加readConcern: { level: "snapshot" }(仅支持多文档事务或单集合操作),游标会锁定命令执行时的数据集快照,完全不会看到后续插入的文档。
内容的提问来源于stack exchange,提问作者MK.
相关产品推荐
相关产品推荐

