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

Delete Documents

このガイドでは、削除操作を使用して 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で利用できるオプションについて説明しています。

オプション
説明

collation

結果をソートするときに使用する照合。照合の詳細については、

「照合ガイド」をご覧ください。タイプ:Collation
デフォルト:None

write_concern

操作の書込み保証 (write concern) 。このオプションを設定しない場合、操作はコレクションに設定された書込み保証 (write concern)を継承します。書込み保証 (write concern) の詳細については、サーバー マニュアルの「 書込み保証 (write concern)

」を参照してください。タイプ:WriteConcern

hint

操作に使用するインデックス。インデックスの詳細については、サーバー マニュアルの「 インデックス 」を参照してください。このオプションは、 MongoDB Serverバージョン4.4

以降に接続している場合にのみ使用できます。タイプ:Hint
デフォルト:None

let_vars

パラメーターと値のマップ。これらのパラメーターは、集計式の変数としてアクセスできます。このオプションは、MongoDB Server バージョン 5.0 以降に接続する場合にのみ利用できます。

タイプ: Document

comment

Bsonデータベースプロファイラ、currentOp 、およびログから操作を追跡するために操作に関連付けられた任意の 値。このオプションは、 MongoDB Serverバージョン4.4

以降に接続している場合にのみ使用できます。タイプ:Bson
デフォルト:None

次のコードは、 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になります。

このセクションでは、次の削除操作のコード例を示します。

次の例では、 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 };
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
borough: String,
}
#[tokio::main]
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 };
#[derive(Serialize, Deserialize, Debug)]
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 };
#[derive(Debug, Serialize, Deserialize)]
struct Address {
street: String,
city: String,
}
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
borough: String,
address: Address,
}
#[tokio::main]
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 };
#[derive(Debug, Serialize, Deserialize)]
struct Address {
street: String,
city: String,
}
#[derive(Serialize, Deserialize, Debug)]
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ドキュメントを参照してください。