たくさんのレコードがあるmongoコレクションで更新クエリを実行しています。だから私はskip()
とlimit()
関数を使っています。例:最初のファイルでは、最初の50000レコードに取り組んでいます。
cur1= db.collection_name.find(no_cursor_timeout=True).skip(0).limit(50000)
送信ファイルで、次の50000レコードにアクセスしています
cur2=db.collection_name.find(no_cursor_timeout=True).skip(50000).limit(50000)
これら2つのカーソルに対して別々のファイルでさまざまな更新クエリを実行します。これらの更新されたレコードがどのようにコレクションに追加されるのか知りたいですか? cur2はcur1クエリで更新されたレコードをフェッチしますか?
かもしれない。同じ順序でレコードを取得できるという保証はありません。ドキュメントが挿入または更新されるたびに、ドキュメントがコレクションに保存された順序も変更されます。そして、その順序はかなりランダムです。
Robomongoを使用して、MongoDBのこの性質が実際に動作していることを確認してください。大学で更新または挿入操作を行うたびに、ドキュメントを取得しようとすると、レコードの順序が変わります。
この場合に提案するのは、一意で単調に増加するフィールドのレコードを並べ替えることです。そうすれば、2番目のカーソルで未編集のレコードを確実に取得できます。
お役に立てれば。