【发布时间】:2014-10-21 12:11:51
【问题描述】:
我们在系统中遇到了一个错误,该错误是由于从 MongoDB 获取重复文档而导致的。
当使用 FindAll 同时从另一个进程更新集合时会发生这种情况。
避免这种情况的最佳做法是什么?
我们不介意获取刚刚更新的文档的陈旧版本、获取刚刚删除的文档或丢失刚刚插入的文档。
我们已经看到游标有一个SetSnapshot 选项($snapshot: true),但对性能有何影响?为什么默认不开启?
我们可以手动删除返回的重复项,但这似乎不对,还会影响性能。
更新:
据我们了解,更改文档大小的更新可能会移动其在集合中的位置。如果在$snapshot选项关闭的情况下,在FindAll操作过程中发生这种更新,则文档可以返回两次。
更新 2:
在客户端(在内存中)手动删除重复项不是一种选择,因为某些文档可能会丢失(出于相同的原因,它们可能会出现两次)。
【问题讨论】:
标签: mongodb mongodb-query mongodb-.net-driver