MongoDB Java驱动程序相当于MongoCursor的快照

时间:2016-03-23 05:50:55

标签: java mongodb mongodb-query mongodb-java

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

以前,我在使用数千个文档的大型数据库进行迭代时,使用snapshot()来防止重复。但是,我似乎无法找到MongoCursor的等效方法。这导致麻烦的重复,例如4471个文档的5571个循环。这就像24%的迭代次数! OMG!

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

请劝告!谢谢!

1 个答案:

答案 0 :(得分:1)

在通过检查探查器日志敲击了一些东西后,我确实得到了一个确认:

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

因此,您需要在.modifiers() $snapshot true "query" : { "find" : "sample", "filter" : { }, "snapshot" : true }, 时调用FindIterable。这与.snaphot()光标修饰符的连线一致。

两者都在探查器中记录如下:

{{1}}

显示正确的修改器。