Update Documents
Overview
このガイドでは、 Cドライバーを使用してMongoDBコレクション内のドキュメントを更新する方法を学習できます。単一のドキュメントを更新するには mongoc_collection_update_one()
関数を呼び出し、複数のドキュメントを更新するには mongoc_collection_update_many()
関数を呼び出します。
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_restaurants
データベースのrestaurants
コレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。
アップデート操作
MongoDBでは、次の関数を使用して更新操作を実行できます。
mongoc_collection_update_one()
は、検索条件に一致する最初のドキュメントを更新します。mongoc_collection_update_many()
は、検索条件に一致するすべてのドキュメントを更新します
各更新関数は、次のパラメーターを受け入れます。
コレクション : 更新するコレクションを指定します。
クエリフィルタードキュメント: 更新するコレクションドキュメントを指定します。クエリフィルターの詳細については、 MongoDB Serverマニュアルの「 クエリフィルター ドキュメント 」セクションを参照してください。
ドキュメントの更新: 更新演算子 、または実行する更新の種類と、変更するフィールドと値を指定します。更新演算子とその使用方法のリストについては、 MongoDB Serverマニュアルの「 フィールド更新演算子 」のガイドを参照してください。
オプションドキュメント:操作をカスタマイズするためのオプション 、または
NULL
を指定します。結果のロケーション :操作結果を含む上書き可能なストレージへのポインター、または
NULL
を指定します。エラー ロケーション : エラー値、または
NULL
のロケーションを指定します。
1 つのドキュメントの更新
次の例では、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);
多くのドキュメントの更新
次の例では、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 | If set to true , allows the write operation to opt out of
document-level validation.Defaults to false .Type: bool |
writeConcern | Sets the write concern for the operation. Defaults to the write concern of the namespace. Type: mongoc_write_concern_t |
collation | Specifies the kind of language collation to use when comparing
text. For more information, see Collation
in the MongoDB Server manual. Type: bson_t |
comment | A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. Type: bson_value_t |
upsert | A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. Type: 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 ドキュメント
このガイドで説明されている関数の詳細については、次のAPIドキュメントを参照してください。