ドキュメントの置換
Overview
このガイドでは、 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);
詳細情報
更新操作について詳しくは、 ドキュメントの更新のガイドを参照してください。
クエリフィルターの作成の詳細については、「クエリの指定」ガイドを参照してください。
API ドキュメント
mongoc_collection_replace_one()
関数の詳細については、 APIドキュメントを参照してください。