一括書き込み操作
項目一覧
Overview
このガイドでは、一括書込み操作を使用して、1 つのデータベース呼び出しで複数の書込み操作を実行する方法を学習できます。
コレクションにドキュメントを挿入 し、複数の他のドキュメントを更新してから、ドキュメントを削除するシナリオを考えてみましょう。個々の関数を使用する場合、各操作には独自のデータベース呼び出しが必要です。代わりに、 一括操作を使用して、データベースへの呼び出し回数を減らすことができます。
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_restaurants
データベース内の restaurants
コレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。
一括書き込み操作の開始
一括書き込み操作を実行中する前に、mongoc_collection_create_bulk_operation_with_opts()
関数を呼び出します。この関数は、実行する一括書き込みに関する指示を保存するために使用できる mongoc_bulk_operation_t
の値を返します。
mongoc_collection_create_bulk_operation_with_opts()
関数は次のパラメータを受け入れます。
コレクション : 変更するコレクションを指定します
オプションドキュメント:操作をカスタマイズするためのオプションを指定します。または
NULL
次の例では、mongoc_collection_create_bulk_operation_with_opts()
関数を呼び出し、restaurants
コレクションをパラメーターとして渡します。
mongoc_bulk_operation_t *bulk = mongoc_collection_create_bulk_operation_with_opts (collection, NULL);
その後、 一括操作に書込み (write) 指示を追加できます。詳細については、次の「 書込み操作の定義 」セクションを参照してください。
書込み (write) 操作を定義する
書込み操作を定義し、次のメソッドを呼び出して一括書込みに追加するには、
mongoc_bulk_operation_insert_with_opts()
mongoc_bulk_operation_update_one_with_opts()
mongoc_bulk_operation_update_many_with_opts()
mongoc_bulk_operation_replace_one_with_opts()
mongoc_bulk_operation_remove_one_with_opts()
mongoc_bulk_operation_remove_many_with_opts()
次のセクションでは、これらのメソッドを使用して対応する書込み操作を指定する方法を示します。
挿入操作
挿入操作を実行するには、mongoc_bulk_operation_t
に挿入指示を追加します。これにより、一括書込みの一部として操作がキューに入れられます。
次の例では、挿入するドキュメントと mongoc_bulk_operation_t
の値をパラメーターとして渡して、mongoc_bulk_operation_insert_with_opts()
関数を呼び出します。
bson_t *insert_doc = BCON_NEW ( "name", BCON_UTF8 ("Mongo's Deli"), "cuisine", BCON_UTF8 ("Sandwiches"), "borough", BCON_UTF8 ("Manhattan"), "restaurant_id", BCON_UTF8 ("1234") ); bson_error_t error; if (!mongoc_bulk_operation_insert_with_opts (bulk, insert_doc, NULL, &error)) { fprintf (stderr, "Failed to add insert operation: %s\n", error.message); } bson_destroy (insert_doc);
複数のドキュメントを挿入するには、ドキュメントごとに mongoc_bulk_operation_insert_with_opts()
を呼び出します。
アップデート操作
更新操作を実行するには、mongoc_bulk_operation_t
に更新指示を追加します。これにより、一括書込みの一部として操作がキューに入れられます。
次の例では、クエリフィルター、ドキュメントの更新、mongoc_bulk_operation_t
値をパラメーターとして渡して、mongoc_bulk_operation_update_one_with_opts()
関数を呼び出します。
bson_t *filter_doc = BCON_NEW ("name", BCON_UTF8 ("Mongo's Deli")); bson_t *update_doc = BCON_NEW ("$set", "{", "cuisine", BCON_UTF8 ("Sandwiches and Salads"), "}"); bson_error_t error; if (!mongoc_bulk_operation_update_one_with_opts (bulk, filter_doc, update_doc, NULL, &error)) { fprintf (stderr, "Failed to add update operation: %s\n", error.message); } bson_destroy (filter_doc); bson_destroy (update_doc);
複数のドキュメントを更新するには、mongoc_bulk_operation_update_many_with_opts()
を呼び出して同じパラメータを渡します。これは、クエリフィルターに一致するすべてのドキュメントを更新するようにドライバーに指示します。
次の例では、アップデートの多くの操作を一括書込み (write) に対してキューに入れています。
bson_t *filter_doc = BCON_NEW ("name", BCON_UTF8 ("Mongo's Deli")); bson_t *update_doc = BCON_NEW ("$set", "{", "cuisine", BCON_UTF8 ("Sandwiches and Salads"), "}"); bson_error_t error; if (!mongoc_bulk_operation_update_many_with_opts (bulk, filter_doc, update_doc, NULL, &error)) { fprintf (stderr, "Failed to add update operation: %s\n", error.message); } bson_destroy (filter_doc); bson_destroy (update_doc);
置換操作
置換操作により、指定されたドキュメントのすべてのフィールドと値が削除され、新しいフィールドと値に置き換えられます。置換操作を実行するには、置換手順を mongoc_bulk_operation_t
に追加します。これにより、一括書込みの一部として操作がキューに入れられます。
次の例では、クエリフィルター、 置換ドキュメント、 mongoc_bulk_operation_t
値をパラメーターとして渡して、mongoc_bulk_operation_replace_one_with_opts()
関数を呼び出します。
bson_t *filter_doc = BCON_NEW ("restaurant_id", BCON_UTF8 ("1234")); bson_t *replace_doc = BCON_NEW ( "name", BCON_UTF8 ("Mongo's Deli"), "cuisine", BCON_UTF8 ("Sandwiches and Salads"), "borough", BCON_UTF8 ("Brooklyn"), "restaurant_id", BCON_UTF8 ("5678") ); bson_error_t error; if (!mongoc_bulk_operation_replace_one_with_opts (bulk, filter_doc, replace_doc, NULL, &error)) { fprintf (stderr, "Failed to add replace operation: %s\n", error.message); } bson_destroy (filter_doc); bson_destroy (replace_doc);
複数のドキュメントを置き換えるには、ドキュメントごとに mongoc_bulk_operation_replace_one_with_opts()
を呼び出します。
削除操作
削除操作を実行するには、mongoc_bulk_operation_t
に削除手順を追加します。これにより、一括書込みの一部として操作がキューに入れられます。
次の例では、クエリフィルターと mongoc_bulk_operation_t
の値をパラメーターとして渡して、mongoc_bulk_operation_remove_one_with_opts()
関数を呼び出します。
bson_t *filter_doc = BCON_NEW ("restaurant_id", BCON_UTF8 ("5678")); bson_error_t error; if (!mongoc_bulk_operation_remove_one_with_opts (bulk, filter_doc, NULL, &error)) { fprintf (stderr, "Failed to add delete operation: %s\n", error.message); } bson_destroy (filter_doc);
複数のドキュメントを削除するには、mongoc_bulk_operation_remove_many_with_opts()
関数を呼び出して同じパラメータを渡します。これは、クエリフィルターに一致するすべてのドキュメントを削除するようにドライバーに指示します。
次の例では、多数の削除操作を一括書き込みでキューに入れています。
bson_t *filter_doc = BCON_NEW ("borough", BCON_UTF8 ("Manhattan")); bson_error_t error; if (!mongoc_bulk_operation_remove_many_with_opts (bulk, filter_doc, NULL, &error)) { fprintf (stderr, "Failed to add delete operation: %s\n", error.message); } bson_destroy (filter_doc);
一括操作の実行
一括書き込みでキューに入れられた各書き込み操作を実行するには、mongoc_bulk_operation_execute()
関数を呼び出します。この関数は次のパラメーターを受け入れます:
mongoc_bulk_operation_t 値 : 各書き込み操作の指示が含まれています
結果のロケーション :操作結果を含む上書き可能なストレージへのポインターを指定します。または
NULL
エラー ロケーション : エラー値のロケーションを指定します。または
NULL
次の例では、 関数を呼び出して、このガイドの前のセクションで指定されている挿入 、 更新 、 置換 、および 削除mongoc_bulk_operation_execute()
の操作を実行します。
bson_error_t error; bool result = mongoc_bulk_operation_execute (bulk, NULL, &error); if (!result) { printf ("Bulk operation error: %s\n", error.message); } mongoc_bulk_operation_destroy (bulk);
いずれかの書込み操作が失敗した場合、 Cドライバーは出力エラーを設定し、それ以上の操作を実行しません。
一括書き込み操作をカスタマイズ
オプション値を指定するBSONドキュメントを渡すことで、mongoc_collection_create_bulk_operation_with_opts()
関数の動作を変更できます。次の表では、ドキュメントで設定できるオプションについて説明します。
オプション | 説明 |
---|---|
ordered | If true , the driver performs the write operations in the order
provided. If an error occurs, the remaining operations are not
attempted.If false , the driver performs the operations in an
arbitrary order and attempts to perform all operations.Defaults to true . |
writeConcern | Specifies the write concern for the bulk operation. For more information, see
Write Concern in the MongoDB Server manual. |
sessionId | Runs the bulk operations within the specified session. For more information, see
Server Sessions in the MongoDB Server manual. |
comment | Attaches a comment to the operation. For more information, see the delete command
fields guide in the
MongoDB Server manual. |
let | Specifies a document with a list of values to improve operation readability. Values
must be constant or closed expressions that don't reference document fields. For more
information, see the let statement in the MongoDB Server manual. |
次の例では、mongoc_collection_create_bulk_operation_with_opts()
関数を呼び出し、ordered
オプションを false
に設定します。
bson_t opts; BSON_APPEND_BOOL (&opts, "ordered", false); bulk = mongoc_collection_create_bulk_operation_with_opts (collection, &opts); // Perform bulk operation bson_destroy (&opts); mongoc_bulk_operation_destroy (bulk);
順序付けなし一括書き込み 内のいずれかの書き込み操作が失敗した場合、 Cドライバーはすべての操作を試行した後にのみエラーを報告します。
注意
順序なしの一括操作では、実行順序は保証されません。 この順序は、ランタイムを最適化するために一覧表示する方法とは異なる場合があります。
詳細情報
個々の書込み操作を実行する方法については、次のガイドを参照してください。
API ドキュメント
このガイドで説明した関数や型の詳細については、次のAPIドキュメントを参照してください。