将我的MongoDB Java驱动程序从2.14版本升级到3.2之后,我从使用DBCursor更改为MongoCursor

以前,我在遍历包含数千个文档的大型数据库时使用snapshot()来防止重复。但是,我似乎找不到MongoCursor的等效方法。这导致令人不安的重复,例如用于4493个文档的5571循环。迭代次数增加了24%!我的天啊!

所以,我的问题是,MongoCursor是否有一种简单的方法或等效的方法可以防止这种情况的发生?如果没有,我应该切换回使用DBCursor吗?它似乎在3.2版中仍受支持。

请指教!谢谢!

最佳答案

通过检查事件探查器日志敲了几下之后,我实际上得到了一个确认:

MongoCursor<Document> cursor = collection.find().modifiers(
    new Document("$snapshot", true)
).iterator();

因此,您需要在仍然使用.modifiers()作为FindIterable $snapshot 时调用 true 。这与使用 .snaphot() 光标修改器的导线是一致的。

两者都在分析器中记录如下:
   "query" : {
            "find" : "sample",
            "filter" : {

            },
            "snapshot" : true
    },

显示正确的修饰符放置位置。

10-05 22:28