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

ドキュメントの置換

項目一覧

  • Overview
  • サンプル データ
  • 置換操作
  • 必要なパラメーター
  • 置換操作の変更
  • 置き換えオプションの例
  • 詳細情報
  • API ドキュメント

このガイドでは、 Cドライバーを使用してMongoDBコレクションに対して置換操作を実行する方法を学習できます。置換操作は 更新操作とは異なります。アップデート操作により、ターゲットドキュメント内の指定されたフィールドのみが変更されます。置換操作により、ターゲットドキュメント内のすべてのフィールドが削除され、新しいフィールドに置き換えられます。

ドキュメントを置き換えるには、 mongoc_collection_replace_one() 関数を使用します。

このガイドの例では、 Atlas サンプル データセットsample_restaurantsデータベースのrestaurantsコレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。

mongoc_collection_replace_one() を使用して置換操作を実行できます。この関数は、検索条件に一致する最初のドキュメントから _idフィールドを除くすべてのフィールドを削除します。次に、指定したフィールドと値がドキュメントに挿入されます。

mongoc_collection_replace_one() 関数には次のパラメータが必要です。

  • コレクション: 置換操作を実行するコレクションを指定します。

  • クエリフィルタードキュメント: 一致するコレクションドキュメントを指定します。この関数は、置き換えが最初に一致するドキュメントを選択します。クエリフィルターの詳細については、 MongoDB Serverマニュアルの「 クエリフィルター ドキュメント 」セクションを参照してください。

  • 置換ドキュメント: 新しいドキュメントに挿入するフィールドと値を指定します。

  • オプションドキュメント:操作をカスタマイズするためのオプション 、または NULL を指定します。

  • 結果のロケーション:操作結果を含む上書き可能なストレージへのポインター、または NULL を指定します。

  • エラー ロケーション: エラー値、つまり NULL のロケーションを指定します。

次の例では、mongoc_collection_replace_one() 関数を使用して、nameフィールド値が "Pizza Town" であるドキュメントのフィールドと値を、nameフィールド値が "Mongo's Pizza" であるドキュメントに置き換えます。

bson_t *query = BCON_NEW ("name", "Pizza Town");
bson_t *replace = BCON_NEW (
"name", "Mongo's Pizza",
"cuisine", "Pizza",
"address", "{",
"street", "123 Pizza St",
"zipCode", "10003",
"}",
"borough", "Manhattan"
);
bson_error_t error;
if (!mongoc_collection_replace_one (collection, query, replace, NULL, NULL, &error)) {
fprintf (stderr, "Replace operation failed: %s\n", error.message);
}
bson_destroy (query);
bson_destroy (replace);

重要

_id フィールドの値は不変です。置き換えドキュメントで _idフィールドの値を指定する場合、既存のドキュメントの _id 値と同一である必要があります。

オプション値を指定するBSONドキュメントを渡すことで、mongoc_collection_replace_one() 関数の動作を変更できます。次の表では、ドキュメントに設定できるオプションの一部について説明しています。

オプション
説明
upsert
Specifies whether the replace operation performs an upsert operation if no documents match the query filter. For more information, see the upsert statement in the MongoDB Server manual.
Defaults to false.
bypassDocumentValidation
Specifies whether the replace operation bypasses document validation. This lets you replace documents that don't meet the schema validation requirements, if any exist. For more information about schema validation, see Schema Validation in the MongoDB Server manual.
Defaults to false.
collation
Specifies the kind of language collation to use when comparing text. For more information, see Collation in the MongoDB Server manual.
hint
Gets or sets the index to scan for documents. For more information, see the hint statement in the MongoDB Server manual.
comment
Attaches a comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.

次のコードでは、mongoc_collection_replace_one() 関数を使用して、nameフィールドの値が "Food Town" である最初のドキュメントを検索し、このドキュメントを name の値が "Food World" である新しいドキュメントに置き換えます。 upsert オプションが true に設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、ドライバーは新しいドキュメントを挿入します。

bson_t *query = BCON_NEW ("name", "Food Town");
bson_t *replace = BCON_NEW (
"name", "Food World",
"cuisine", "Mixed",
"address", "{",
"street", "123 Food St",
"zipCode", "10003",
"}",
"borough", "Manhattan"
);
bson_error_t error;
bson_t opts;
bson_init (&opts);
bson_append_bool (&opts, "upsert", -1, true);
if (!mongoc_collection_replace_one (collection, query, replace, &opts, NULL, &error)) {
fprintf (stderr, "Replace operation failed: %s\n", error.message);
}
bson_destroy (query);
bson_destroy (replace);
bson_destroy (&opts);

更新操作について詳しくは、 ドキュメントの更新のガイドを参照してください。

クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。

mongoc_collection_replace_one()関数の詳細については、 APIドキュメントを参照してください。

戻る

ドキュメントの挿入