AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

Delete Documents

このガイドでは、 C++ドライバーを使用して、削除操作を実行し、 MongoDBコレクションからドキュメントを削除する方法を学習できます。

削除操作は、MongoDB コレクションから 1 つ以上のドキュメントを削除します。 削除操作は、 delete_one()またはdelete_many()メソッドを使用して実行できます。

The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your C++ application, instantiate a mongocxx::client that connects to an Atlas cluster and assign the following values to your db and collection variables:

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インスタンスに設定できるフィールドを説明しています。

フィールド
説明

collation

結果をソートするときに使用する言語照合の種類を指定します。詳細については、 MongoDB Serverマニュアルの 「照合」 を参照してください。

write_concern

操作の書込み保証 (write concern)を設定します。詳細については、 MongoDB Serverマニュアルの「 書込み保証 」を参照してください。

hint

ドキュメントをスキャンするインデックスを取得または設定します。詳細については、 MongoDB Serverマニュアルの ヒント ステートメントを参照してください。

let

操作の読みやすさを向上させるために、 の値のリストを含むドキュメントを指定します。値は、ドキュメントフィールドを参照しない定数または閉じた式である必要があります。詳細については、 MongoDB Serverマニュアルの let ステートメントを参照してください。

comment

Attaches a comment to the operation. For more information, see the delete command fields guide in the MongoDB Server manual.

次の例では、 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 ドキュメントを参照してください。