Mongo コレクション内のすべてのオブジェクトを調べ (パラメータなしで find() の結果を反復処理)、それらのいくつかに変更を加えるコードがいくつかあります。これを行うのは安全ではないようです。変更は保存されますが、カーソルを反復処理し続けると、変更されたオブジェクトのサブセット (10 ~ 15%) が 2 回目に表示されます。ドキュメント ID やインデックスがあるものは変更していません。
事前にすべてのドキュメント ID を取得する (カーソルを配列に変換する) ことでこの問題を回避できると思いますが、これらは大きなコレクションなので、避けたいと思います。
デフォルトでは、find() の結果に順序が定義されていないように見えることに気付いたので、カーソル {"_id":1} に明示的な並べ替えを設定してみました。これで問題は解決したようです。何を変更しても、何も表示されなくなりました。しかし、それが良い/信頼できるアプローチであるかどうかはわかりません。ドキュメントからわかる限り、並べ替えを追加しても、すべての ID を事前にクエリするわけではありません。もしそうなら、それはいいことですが、なぜそれが問題を解決するのかわかりません。
変更中にカーソルを使用するのは悪い考えですか?
問題があれば、私は Scala/Casbah を使用しています。