将我的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
},
显示正确的修饰符放置位置。