AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Update Documents

このガイドでは、 Cドライバーを使用してMongoDBコレクション内のドキュメントを更新する方法を学習できます。 単一のドキュメントを更新するには mongoc_collection_update_one() 関数を呼び出し、複数のドキュメントを更新するには mongoc_collection_update_many() 関数を呼び出します。

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

MongoDBでは、次の関数を使用して更新操作を実行できます。

  • mongoc_collection_update_one()は、検索条件に一致する最初のドキュメントを更新します。

  • mongoc_collection_update_many()は、検索条件に一致するすべてのドキュメントを更新します

各更新関数は、次のパラメーターを受け入れます。

  • コレクション : 更新するコレクションを指定します。

  • クエリフィルタードキュメント: 更新するコレクションドキュメントを指定します。クエリフィルターの詳細については、 MongoDB Serverマニュアルの「 クエリフィルター ドキュメント 」セクションを参照してください。

  • ドキュメントの更新: 更新演算子 、または実行する更新の種類と、変更するフィールドと値を指定します。更新演算子とその使用方法のリストについては、 MongoDB Serverマニュアルの「 フィールド更新演算子 」のガイドを参照してください。

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

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

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

ドキュメントを更新するには、次の構文を使用します。

bson_t *query = BCON_NEW("<field to match>", BCON_UTF8("<value to match>"));
bson_t *update = BCON_NEW("$set", "{", "<field name>", BCON_UTF8("<value>"), "}");
bson_error_t error;
if (!mongoc_collection_update_one(collection, query, update, NULL, NULL, &error)) {
fprintf(stderr, "Update one operation failed: %s\n", error.message);
}
bson_destroy(query);
bson_destroy(update);

次の例では、 mongoc_collection_update_one() 関数を使用して、restaurantsコレクション内のドキュメントの name 値を "Bagels N Buns" から "2 Bagels 2 Buns" に更新します。

bson_t *query = BCON_NEW("name", BCON_UTF8("Bagels N Buns"));
bson_t *update = BCON_NEW("$set", "{", "name", BCON_UTF8("2 Bagels 2 Buns"), "}");
bson_error_t error;
if (!mongoc_collection_update_one(collection, query, update, NULL, NULL, &error)) {
fprintf(stderr, "Update one operation failed: %s\n", error.message);
}
bson_destroy(query);
bson_destroy(update);

複数のドキュメントを更新するには、次の構文を使用します。

bson_t *query = BCON_NEW("<field to match>", BCON_UTF8("<value to match>"));
bson_t *update = BCON_NEW("$set", "{", "<field name>", BCON_UTF8("<value>"), "}");
bson_error_t error;
if (!mongoc_collection_update_many(collection, query, update, NULL, NULL, &error)) {
fprintf(stderr, "Update many operation failed: %s\n", error.message);
}
bson_destroy(query);
bson_destroy(update);

次の例では、 mongoc_collection_update_many() 関数を使用して、cuisine の値が "Pizza" であるすべてのドキュメントを更新します。 更新後、ドキュメントの cuisine 値は "Pasta" になります。

bson_t *query = BCON_NEW("cuisine", BCON_UTF8("Pizza"));
bson_t *update = BCON_NEW("$set", "{", "cuisine", BCON_UTF8("Pasta"), "}");
bson_error_t error;
if (!mongoc_collection_update_many(collection, query, update, NULL, NULL, &error)) {
fprintf(stderr, "Update many operation failed: %s\n", error.message);
}
bson_destroy(query);
bson_destroy(update);

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

オプション
説明

bypassDocumentValidation

trueに設定すると、書込み操作でドキュメントレベルの検証をオプトアウトできます。デフォルトは
false
です。タイプ:bool

writeConcern

操作の書込み保証 (write
concern)を設定します。デフォルトは、名前空間の書込み保証 (write
concern)です。タイプ:mongoc_write_concern_t

collation

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

comment

操作に添付するコメント。詳細については、 MongoDB Serverマニュアルの 「挿入コマンド
フィールドのガイド」を参照してください。タイプ:bson_value_t

upsert

操作に添付するコメント。詳細については、 MongoDB Serverマニュアルの 「挿入コマンド
フィールドのガイド」を参照してください。タイプ:bson_value_t

次の例では、 mongoc_collection_update_many() 関数を使用して、borough の値が "Manhattan" であるすべてのドキュメントを検索します。 次に、これらのドキュメントの borough の値を "Manhattan (north)" にアップデートします。 upsert オプションが true に設定されているため、クエリフィルターが既存のドキュメントと一致しない場合、 Cドライバーは新しいドキュメントを挿入します。

bson_t *query = BCON_NEW("borough", BCON_UTF8("Manhattan"));
bson_t *update = BCON_NEW("$set", "{", "borough", BCON_UTF8("Manhattan (north)"), "}");
bson_error_t error;
bson_t opts;
bson_init(&opts);
bson_append_bool(&opts, "upsert", -1, true);
if (!mongoc_collection_update_many(collection, query, update, &opts, NULL, &error)) {
fprintf(stderr, "Update many operation failed: %s\n", error.message);
}
bson_destroy(query);
bson_destroy(update);
bson_destroy(&opts);

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

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