Overview
このガイドでは、削除操作を使用して MongoDB コレクションからドキュメントを削除する方法を学習できます。
このガイドには、次のセクションが含まれています。
サンプル データの例では、削除操作の例で使用されるサンプル データが示されています
「削除操作」では、ドライバーを使用して削除操作を実行する方法について説明します
追加情報では、このガイドで言及されている型とメソッドのリソースとAPIドキュメントへのリンクを提供します
サンプルデータの例
このガイドの例では、次のサンプル ドキュメントを使用します。 各ドキュメントは、店舗の在庫内の商品を表し、その分類と単価に関する情報が含まれています。
{ "item": "trowel", "category": "garden", "unit_price": 9.89 }, { "item": "placemat", "category": "kitchen", "unit_price": 3.19 }, { "item": "watering can", "category": "garden", "unit_price": 11.99 }
削除操作
Rust ドライバーは、削除操作を実行するための メソッドとdelete_one() delete_many()メソッドを提供します。
パラメーター
delete_one()メソッドとdelete_many()メソッドは、クエリフィルターをパラメーターとして受け取ります。 クエリフィルターは、一致するドキュメントの基準を形成するフィールドと値で構成されます。
オプション
オプション ビルダー メソッドをdelete_one()とdelete_many()に連鎖させることで、削除操作メソッドの動作を変更できます。 これらのオプション メソッドはDeleteOptions構造体フィールドを設定します。
注意
設定オプション
オプション ビルダのメソッドを削除メソッドの呼び出しに直接連結することで、 DeleteOptionsフィールドを設定できます。 以前のバージョンのドライバーを使用している場合は、オプション ビルダー メソッドをbuilder()メソッドに連結してDeleteOptionsインスタンスを構築する必要があります。 次に、オプション インスタンスをパラメーターとしてdelete_one()またはdelete_many()に渡します。
次の表では、 DeleteOptionsで利用できるオプションについて説明しています。
オプション | 説明 |
|---|---|
| |
| 操作の書込み保証 (write concern) 。このオプションを設定しない場合、操作はコレクションに設定された書込み保証 (write concern)を継承します。書込み保証 (write concern) の詳細については、サーバー マニュアルの「 書込み保証 (write concern) |
| 操作に使用するインデックス。インデックスの詳細については、サーバー マニュアルの「 インデックス 」を参照してください。このオプションは、 MongoDB Serverバージョン4.4 |
| パラメーターと値のマップ。これらのパラメーターは、集計式の変数としてアクセスできます。このオプションは、MongoDB Server バージョン 5.0 以降に接続する場合にのみ利用できます。 |
|
|
次のコードは、 comment()メソッドをdelete_one()メソッドに連結してcommentフィールドを設定する方法を示しています。
let res = my_coll .delete_one(filter) .comment(bson!("hello!")) .await?;
戻り値
delete_one()メソッドとdelete_many()メソッドはDeleteResult型を返します。 このタイプには、削除されたドキュメント数を示すdeleted_countプロパティが含まれています。 指定したクエリフィルターに一致するドキュメントがない場合、削除操作によってドキュメントは削除されず、 deleted_countの値は0になります。
削除の例
このセクションでは、次の削除操作のコード例を示します。
削除の例 1 つ
次の例では、 delete_one() メソッドを使用して、item の値が "placemat" であるドキュメントを削除します。
let filter = doc! { "item": "placemat" }; let res = my_coll.delete_one(filter).await?; println!("Deleted documents: {}", res.deleted_count);
Deleted documents: 1
完全なファイルの例: ドキュメントの削除
この例では、 sample_restaurantsデータベース内のrestaurantsコレクションからクエリフィルターに一致するドキュメントを削除します。 delete_one() メソッドは、nameフィールドの値が "Haagen-Dazs" であり、かつ boroughフィールドの値が "Brooklyn" である最初のドキュメントを削除します。
restaurantsコレクション内のドキュメントには、Document 型またはカスタムデータ型のインスタンスとしてアクセスできます。 コレクションのデータを表すデータ型を指定するには、強調表示された行の <T> 型パラメータを次のいずれかの値に置き換えます。
<Document>:コレクションドキュメントはBSONドキュメントとしてアクセスします<Restaurant>: コードの上部で定義されたRestaurant構造体のインスタンスとしてコレクションドキュメントにアクセスします
各実行時に対応するコードを表示するには、 AsynchronousタブまたはSynchronousタブを選択します。
use mongodb::{ bson::{ Document, doc }, Client, Collection }; use serde::{ Deserialize, Serialize }; struct Restaurant { name: String, borough: String, } async fn main() -> mongodb::error::Result<()> { let uri = "<connection string>"; let client = Client::with_uri_str(uri).await?; // Replace <T> with the <Document> or <Restaurant> type parameter let my_coll: Collection<T> = client .database("sample_restaurants") .collection("restaurants"); let filter = doc! { "$and": [ doc! { "name": "Haagen-Dazs" }, doc! { "borough": "Brooklyn" } ] }; let result = my_coll.delete_one(filter).await?; println!("Deleted documents: {}", result.deleted_count); Ok(()) }
Deleted documents: 1
use mongodb::{ bson::{ Document, doc }, sync::{ Client, Collection } }; use serde::{ Deserialize, Serialize }; struct Restaurant { name: String, borough: String, } fn main() -> mongodb::error::Result<()> { let uri = "<connection string>"; let client = Client::with_uri_str(uri)?; // Replace <T> with the <Document> or <Restaurant> type parameter let my_coll: Collection<T> = client .database("sample_restaurants") .collection("restaurants"); let filter = doc! { "$and": [ doc! { "name": "Haagen-Dazs" }, doc! { "borough": "Brooklyn" } ] }; let result = my_coll.delete_one(filter).run()?; println!("Deleted documents: {}", result.deleted_count); Ok(()) }
Deleted documents: 1
削除の例
この例では、次のアクションを実行します。
delete_many()メソッドを呼び出しますcategoryの値が"garden"であるドキュメントに一致するクエリフィルターをdelete_many()に渡しますhint()メソッドをdelete_many()にチェーンして、_id_インデックスを削除操作のヒントとして使用します
let filter = doc! { "category": "garden" }; let hint = Hint::Name("_id_".to_string()); let res = my_coll .delete_many(filter) .hint(hint) .await?; println!("Deleted documents: {}", res.deleted_count);
Deleted documents: 2
注意
上記のコード例でdelete_many()ではなくdelete_one()メソッドを使用すると、ドライバーはクエリフィルターに一致する 2 つのドキュメントのうち最初のドキュメントのみを削除します。
完全なファイルの例: 複数のドキュメントを削除する
この例では、 sample_restaurantsデータベース内の restaurantsコレクションからクエリフィルターに一致するすべてのドキュメントを削除します。 delete_many() メソッドは、boroughフィールドの値が "Manhattan" で、かつ address.streetフィールドの値が "Broadway" であるドキュメントを削除します。
restaurantsコレクション内のドキュメントには、Document 型またはカスタムデータ型のインスタンスとしてアクセスできます。 コレクションのデータを表すデータ型を指定するには、強調表示された行の <T> 型パラメータを次のいずれかの値に置き換えます。
<Document>:コレクションドキュメントはBSONドキュメントとしてアクセスします<Restaurant>: コードの上部で定義されたRestaurant構造体のインスタンスとしてコレクションドキュメントにアクセスします
各実行時に対応するコードを表示するには、 AsynchronousタブまたはSynchronousタブを選択します。
use mongodb::{ bson::{ Document, doc }, Client, Collection }; use serde::{ Deserialize, Serialize }; struct Address { street: String, city: String, } struct Restaurant { name: String, borough: String, address: Address, } async fn main() -> mongodb::error::Result<()> { let uri = "<connection string>"; let client = Client::with_uri_str(uri).await?; // Replace <T> with the <Document> or <Restaurant> type parameter let my_coll: Collection<T> = client .database("sample_restaurants") .collection("restaurants"); let filter = doc! { "$and": [ doc! { "borough": "Manhattan" }, doc! { "address.street": "Broadway" } ] }; let result = my_coll.delete_many(filter).await?; println!("Deleted documents: {}", result.deleted_count); Ok(()) }
// Your values might differ Deleted documents: 615
use mongodb::{ bson::{ Document, doc }, sync::{ Client, Collection } }; use serde::{ Deserialize, Serialize }; struct Address { street: String, city: String, } struct Restaurant { name: String, borough: String, address: Address, } fn main() -> mongodb::error::Result<()> { let uri = "<connection string>"; let client = Client::with_uri_str(uri)?; // Replace <T> with the <Document> or <Restaurant> type parameter let my_coll: Collection<T> = client .database("sample_restaurants") .collection("restaurants"); let filter = doc! { "$and": [ doc! { "borough": "Manhattan" }, doc! { "address.street": "Broadway" } ] }; let result = my_coll.delete_many(filter).run()?; println!("Deleted documents: {}", result.deleted_count); Ok(()) }
// Your values might differ Deleted documents: 615
詳細情報
このガイドの操作の詳細については、次のドキュメントを参照してください。
照合ガイド
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。