Overview
このガイドでは、 Cドライバーを使用してMongoDBコレクションに対して置換操作を実行する方法を学習できます。置換操作は更新操作とは異なります。 アップデート操作、ターゲットドキュメント内の指定されたフィールドのみが変更されます。 置換操作、ターゲットドキュメント内のすべてのフィールドが削除され、新しいフィールドに置き換えられます。
ドキュメントを置き換えるには、mongoc_collection_replace_one() 関数を使用します。
サンプル データ
このガイドの例では、Atlas のサンプルデータセットから、sample_restaurantsデータベースのrestaurantsコレクションを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDBを使い始めるガイド を参照してください 。
置換操作
mongoc_collection_replace_one() を使用して置換操作を実行できます。 この関数は、検索条件に一致する最初のドキュメントから _idフィールドを除くすべてのフィールドを削除します。 次に、指定したフィールドと値がドキュメントに挿入されます。
必要なパラメーター
mongoc_collection_replace_one() 関数には次のパラメータが必要です。
コレクション: 置換操作 を実行するコレクションを指定します。
置換ドキュメント: 新しいドキュメントに挿入するフィールドと値を指定します。
オプションドキュメント:操作をカスタマイズするためのオプション または
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() 関数の動作を変更できます。 次の表では、ドキュメントに設定できるオプションの一部について説明しています。
オプション | 説明 |
|---|---|
| クエリフィルターに一致するドキュメントがない場合に、置換操作でアップサート操作を実行するかどうかを指定します。詳細については、MongoDB Server マニュアルのアップサートステートメントを参照してください。 |
| 置換操作がドキュメント検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たしていないドキュメントが存在する場合は、それを置き換えることができます。スキーマ検証の詳細については、MongoDB Server マニュアルの「スキーマ検証」を参照してください。 |
| テキストを比較するときに使用する言語照合の種類を指定します。詳細については、MongoDB Server マニュアルの 照合 を参照してください。 |
| ドキュメントをスキャンするインデックスを取得または設定します。 詳細については、MongoDB Server マニュアルのヒント ステートメントを参照してください。 |
| 操作にコメントを付けます。 詳細については、 MongoDB Serverマニュアルの 「挿入コマンド フィールドのガイド」を参照してください。 |
置き換えオプションの例
次のコードでは、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ドキュメントを参照してください。