Docs Menu
Docs Home
/ / /
C ドライバー
/

一括書き込み操作

項目一覧

  • Overview
  • サンプル データ
  • 一括書き込み操作の開始
  • 書込み (write) 操作を定義する
  • 挿入操作
  • アップデート操作
  • 置換操作
  • 削除操作
  • 一括操作の実行
  • 一括書き込み操作をカスタマイズ
  • 詳細情報
  • API ドキュメント

このガイドでは、一括書込み操作を使用して、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) 指示を追加できます。詳細については、次の「 書込み操作の定義 」セクションを参照してください。

書込み操作を定義し、次のメソッドを呼び出して一括書込みに追加するには、

  • 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ドライバーはすべての操作を試行した後にのみエラーを報告します。

注意

順序なしの一括操作では、実行順序は保証されません。 この順序は、ランタイムを最適化するために一覧表示する方法とは異なる場合があります。

個々の書込み操作を実行する方法については、次のガイドを参照してください。

  • ドキュメントの挿入

  • Update Documents

  • Delete Documents

  • ドキュメントの置換

このガイドで説明した関数や型の詳細については、次のAPIドキュメントを参照してください。

戻る

削除