AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

ドキュメントの置換

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

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

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

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

クエリフィルターに一致するドキュメントがない場合に、置換操作でアップサート操作を実行するかどうかを指定します。詳細については、 MongoDB Serverマニュアルの アップサート ステートメント を参照してください。デフォルトは
falseです。

bypassDocumentValidation

置換操作がドキュメントの検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメントを存在する場合に置き換えることができます。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは
falseです。

collation

テキストを比較するときに使用する言語照合の種類を指定します。詳細については、 MongoDB Serverマニュアルの 「照合」 を参照してください。

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ドキュメントを参照してください。