MongoDB では、コレクションの読み取り操作はカーソルを返します。
読み取り操作がコレクション内のほとんどのドキュメントにアクセスしている場合、他の更新操作とインターリーブする可能性があります。
その場合、カーソルのドキュメントが重複する可能性はありますか?
カーソルが重複を避けるようにする方法は?
MongoDB では、コレクションの読み取り操作はカーソルを返します。
読み取り操作がコレクション内のほとんどのドキュメントにアクセスしている場合、他の更新操作とインターリーブする可能性があります。
その場合、カーソルのドキュメントが重複する可能性はありますか?
カーソルが重複を避けるようにする方法は?
ここでは、distinct メソッドはあまり役に立ちません。これは関数が解決できる問題ではなく、それだけでなく、通常のカーソルの速度の何分の一かです。
読み取り操作がコレクション内のほとんどのドキュメントにアクセスしている場合、他の更新操作とインターリーブする可能性があります。
ドキュメントが、カーソルの種類によって再度読み取られるような方法で移動する場合は可能です。
これが問題になるかどうかは、たとえば のように更新されないもので並べ替える場合は、_id
あまり心配する必要はありませんが、更新されるもので並べ替えると、ずれることがあります。はい。問題が発生します。
これを解決する 1 つの方法は、カーソルのその反復の最後を見て_id
、カーソルを配列などで 1000 のバッチに埋めることです。そのバッチの最後のものを取得した後_id
、範囲を広げ、それよりも大きいものをすべて取ります_id
。
別の方法として、スナップショット クエリを実行することもできます: http://docs.mongodb.org/manual/reference/operator/snapshot/ただし、この関数にはかなりの制限があります。