Bulk()
Tip
MongoDB は、一括書込み操作を実行するための db.collection.bulkWrite()
メソッドも提供します。
説明
Bulk()
単一のコレクションに対して一括して実行する書込み (write) 操作のリストを作成するために使われる一括操作ビルダです。ビルダをインスタンス化するには、
db.collection.initializeOrderedBulkOp()
メソッドまたはdb.collection.initializeUnorderedBulkOp()
メソッドのいずれかを使用します。
順序付き一括操作と順序なし一括操作
ビルダは、操作のリストを順序付きまたは順序なしで作成できます。
順序付き操作
順序付きの操作リストの場合、MongoDB はリスト内の書込み操作を順番に実行します。いずれかの書込み操作の処理中にエラーが発生した場合、MongoDB はリスト内の残りの書込み操作を処理せずに返します。
db.collection.initializeOrderedBulkOp()
を使用して、書込みコマンドの順序付きリストのビルダを作成します。
ordered
の操作リストを実行するとき、MongoDB は operation type
と連続性によって操作をグループ化します。つまり、同じタイプの連続した操作がグループ化されます。たとえば、順序付きリストに 2 回の挿入操作があり、その後に更新操作、さらに別の挿入操作が続く場合、MongoDB は操作を 3 つのグループに分けます。最初のグループには 2 回の挿入操作、2 番目のグループには更新操作、3 番目のグループには最後の挿入操作が含まれます。この動作は、将来のバージョンで変更される可能性があります。
Bulk()
{ のmongosh
操作とドライバーの同等のメソッドでは、グループ内の操作の数に制限はありません。一括操作実行用に操作がどのようにグループ化されているかを確認するには、実行Bulk.getOperations()
後 に呼び出します。
シャーディングされたコレクションで ordered
操作リストを実行すると、通常、 unordered
リストの実行よりも時間がかかります。これは、ordered リストでは毎回の操作で前の操作の完了を待機する必要があるためです。
順序なし操作
順序なしの操作リストを使用すると、MongoDB はリスト内の書込み操作を並行して実行することも、非決定的な順序で実行することもできます。いずれかの書込み操作の処理中にエラーが発生した場合、MongoDB はリスト内の残りの書込み操作の処理を続行します。
db.collection.initializeUnorderedBulkOp()
を使用して、書込みコマンドの順序なしリストのビルダを作成します。
unordered
の操作リストを実行するとき、MongoDB は操作をグループ化します。順序なしの一括操作では、リスト内の操作の順序を変更してパフォーマンスを向上させることができます。そのため、アプリケーションは、unordered
一括操作を実行するときに順序に依存すべきではありません。
Bulk()
{ のmongosh
操作とドライバーの同等のメソッドでは、グループ内の操作の数に制限はありません。一括操作実行用に操作がどのようにグループ化されているかを確認するには、実行Bulk.getOperations()
後 に呼び出します。
トランザクション
Bulk()
は分散トランザクション内で使用できます。
Bulk.insert()
操作の場合、コレクションがすでに存在している必要があります。
Bulk.find.upsert()
の場合、操作の結果がアップサートになる場合は、コレクションがすでに存在している必要があります。
トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。
重要
ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。
トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。
メソッド
Bulk()
ビルダには次のメソッドがあります。
名前 | 説明 |
---|---|
挿入オペレーションを操作リストに追加します。 | |
アップデート操作または削除操作のクエリ条件を指定します。 | |
複数のドキュメントの削除操作を操作リストに追加します。 | |
1 つのドキュメントの削除操作を操作リストに追加します。 | |
Bulk.find.delete() のエイリアス。 | |
Bulk.find.deleteOne() のエイリアス。 | |
1 つのドキュメントの置換操作を操作リストに追加します。 | |
1 つのドキュメントのアップデート操作を操作リストに追加します。 | |
multi のアップデート操作を操作リストに追加します。 | |
アップデート操作の upsert: true を指定します。 | |
操作リストを一括で実行します。 | |
Bulk() 操作オブジェクトで実行された書き込み操作の配列を返します。 | |
Bulk() 操作オブジェクト内の操作およびバッチの数を含む JSON document を返します。 | |
Bulk.toJSON() 結果を文字列として返します。 |