我有一些代码检查 Mongo 集合中的每个对象(迭代没有参数的 find() 的结果),并对其中的一些进行更改。这样做似乎不安全:我的更改已保存,但是当我继续遍历光标时,更改对象的子集(10-15%)第二次出现。我没有更改文档 ID 或任何有索引的东西。
我想我可以通过提前获取所有文档 ID(将光标转换为数组)来避免这个问题,但这些都是大型集合,所以我真的很想避免这种情况。
我注意到默认情况下 find() 的结果似乎没有任何定义的顺序,所以我尝试在光标 {"_id":1} 上进行显式排序。这似乎已经解决了这个问题——无论我修改什么,现在都没有出现两次。但我不知道这是否是一个好的/可靠的方法。据我从文档中可以看出,添加排序不会使其预查询所有 ID;如果是这样,那很好,但是我不知道为什么它会解决问题。
在更改内容时使用游标只是一个坏主意吗?
如果这很重要,我正在使用 Scala/Casbah。