mongodb - 迭代游标时修改Mongo对象的安全+有效方法?

标签 mongodb mongodb-scala

我有一些代码检查 Mongo 集合中的每个对象(在没有参数的情况下迭代 find() 的结果),并对其中的一些进行更改。这似乎不是一件安全的事情:我的更改已保存,但是当我继续遍历光标时,更改对象的子集(10-15%)再次出现。我没有更改文档 ID 或任何有索引的东西。

我想我可以通过提前获取所有文档 ID(将光标转换为数组)来避免这个问题,但这些都是大型集合,所以我真的很想避免这种情况。

我注意到默认情况下 find() 的结果似乎没有任何定义的顺序,因此我尝试在光标 {"_id":1} 上进行显式排序。这似乎已经解决了这个问题——无论我修改什么,现在都没有出现两次。但我不知道这是否是一个好的/可靠的方法。据我从文档中可以看出,添加排序不会 使其预查询所有 ID;如果是这样,那很好,但我不知道为什么它会解决问题。

在更改内容时使用光标只是一个坏主意吗?

我正在使用 Scala/Cas​​bah,如果这很重要的话。

最佳答案

听起来您想要的是快照查询。以下是有关如何执行此操作的更多信息:

http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database

关于mongodb - 迭代游标时修改Mongo对象的安全+有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199089/

相关文章:

mongodb - mongo 更新查询给出错误

javascript - 使用 Mongoose 获取 _id

javascript - 为什么 MongoDB 中的所有对象 ID 都以数字 5 开头?

javascript - 在 MongoDB 查找函数中,我回调并使用 res.redirect,我收到无法设置 header 错误?

javascript - mongodb - 使用 COLLSCAN 而不是索引的 $lookup 管道

javascript - Mongoose 保存与插入与创建

mongodb - 给定一条特定记录,检索 MongoDB 集合中的前一条记录

scala - 使用 Casbah 通过正则表达式查找