Overview
このガイドでは、 C++ドライバーを使用して、削除操作を実行し、 MongoDBコレクションからドキュメントを削除する方法を学習できます。
削除操作は、MongoDB コレクションから 1 つ以上のドキュメントを削除します。 削除操作は、 delete_one()またはdelete_many()メソッドを使用して実行できます。
サンプル データ
このガイドの例では、 Atlasサンプルデータセットのsample_restaurantsデータベースのrestaurantsコレクションを使用します。 C++アプリケーションからこのコレクションにアクセスするには、Atlasmongocxx::client クラスターに接続する をインスタンス化し、次の値をdb 変数とcollection 変数に割り当てます。
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、MongoDBを使い始めるガイドを参照してください。
削除操作
次の方法を使用して削除操作を実行できます。
delete_one()は、検索条件に一致する最初のドキュメントを削除します。delete_many()は、検索条件に一致するすべてのドキュメントを削除します
各削除メソッドにはクエリフィルタードキュメントが必要です。このドキュメントは、削除対象として選択するドキュメントを決定するための検索条件を指定します。 クエリフィルターの詳細については、 MongoDB Serverマニュアルの「クエリフィルター ドキュメント 」セクションを参照してください。
単一ドキュメントの削除
次の例では、 delete_one()メソッドを使用して、 nameの値が"Ready Penny Inn"であるrestaurantsコレクション内のドキュメントを削除します。
auto result = collection.delete_one(make_document(kvp("name", "Ready Penny Inn")));
複数のドキュメントの削除
次の例では、 delete_many()メソッドを使用して、 boroughの値が"Brooklyn"であるrestaurantsコレクション内のすべてのドキュメントを削除します。
auto result = collection.delete_many(make_document(kvp("borough", "Brooklyn")));
削除操作をカスタマイズする
mongocxx::options::delete_optionsクラスのインスタンスを任意のパラメータとして渡すことで、 delete_one()メソッドとdelete_many()メソッドの動作を変更できます。 次の表では、 mongocxx::options::delete_optionsインスタンスに設定できるフィールドを説明しています。
フィールド | 説明 |
|---|---|
| 結果をソートするときに使用する言語照合の種類を指定します。 詳細については、MongoDB Server マニュアルの 「照合」 を参照してください。 |
| 操作の書込み保証 (write concern)を設定します。 詳細については、 MongoDB Serverマニュアルの「 書込み保証 」を参照してください。 |
| ドキュメントをスキャンするインデックスを取得または設定します。 詳細については、MongoDB Server マニュアルのヒント ステートメントを参照してください。 |
| 操作の読みやすさを向上させるために、 の値のリストを含むドキュメントを指定します。 値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。 詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。 |
| 操作にコメントを付けます。 詳細については、 MongoDB Serverマニュアルの 「削除コマンド フィールドのガイド」を参照してください。 |
次の例では、 delete_many()メソッドを呼び出して、 name値に string "Mongo"が含まれるrestaurantsコレクション内のすべてのドキュメントを削除します。 また、 mongocxx::options::delete_optionsインスタンスのcommentフィールドを設定して、操作にコメントを追加します。
mongocxx::options::delete_options opts{}; opts.comment(bsoncxx::types::bson_value::view_or_value{"Deleting Mongo restaurants"}); auto query_filter = make_document(kvp("name", make_document(kvp("$regex", "Mongo")))); auto result = collection.delete_many(query_filter.view(), opts);
Tip
上記の例でdelete_many()ではなくdelete_one()メソッドが使用されている場合、ドライバーはname値に"Mongo"を含む最初のドキュメントのみを削除します。
戻り値
delete_one()メソッドとdelete_many()メソッドはmongocxx::result::delete_resultクラスのインスタンスを返します。 このクラスには、次のメンバー関数が含まれています。
result()は、未加工の一括書込み結果を返しますdeleted_count()は、削除されたドキュメントの数を返します
クエリフィルターがどのドキュメントにも一致しない場合、ドライバーはドキュメントを削除せず、 deleted_countは0です。
次の例では、 delete_many()メソッドを呼び出して、 cuisineの値が"Greek"であるドキュメントを削除します。 次に、 deleted_count()ノード関数を呼び出して、削除されたドキュメント数を出力します。
auto result = collection.delete_many(make_document(kvp("cuisine", "Greek"))); std::cout << result->deleted_count() << std::endl;
Deleted documents: 111
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。