定義
- db.collection.deleteOne()
- MongoDB とドライバー - このページでは - mongoshメソッドがドキュメントされています。 MongoDB ドライバーで同等のメソッドを確認するには、プログラミング言語の対応するページを参照してください。- コレクションから 1 つのドキュメントを削除します。 - 次の値を返します。 - 次の要素を含むドキュメント: - acknowledged- true操作が 書込み保証( write concern )付きで実行された場合は としてブール値- false(書込み保証が無効になっている場合は
- deletedCount削除されたドキュメントの数を含みます
 
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです 
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
- MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン 
- MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン 
構文
deleteOne() メソッドの形式は次のとおりです。
db.collection.deleteOne(     <filter>,     {       writeConcern: <document>,       collation: <document>,       hint: <document|string>     } ) 
deleteOne() メソッドは次のパラメーターを取ります。
| Parameter | タイプ | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ドキュメント | クエリ演算子を使用して削除条件を指定します。 コレクションで返される最初のドキュメントを削除するには、空のドキュメント | |||||||||||
| ドキュメント | 任意。書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。 トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。 | |||||||||||
| ドキュメント | 任意。 操作に使用する照合を指定します。 照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。 照合オプションの構文は次のとおりです。 照合を指定する場合、 照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合( コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。 1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。 | |||||||||||
| ドキュメント | 任意。 クエリ述語をサポートするために使用するインデックスを指定するドキュメントまたは string です。 このオプションには、インデックス仕様ドキュメントまたはインデックス名の文字列を指定できます。 存在しないインデックスを指定した場合、操作はエラーになります。 の例については、「  | 
動作
Deletion Order
db.collection.deleteOne()はフィルターに一致する最初のドキュメントを削除します。 正確な削除を行うには、 _idなどの一意のインデックスの構成フィールドを使用します。
時系列コレクション
時系列コレクション で使用される場合、db.collection.deleteOne() は 例外を返します。WriteError
シャーディングされたコレクション
シャーディングされたコレクションでdb.collection.deleteOne()を使用するには、次の手順に従います。
- 1つのシャードのみをターゲットにする場合は、クエリ仕様で部分的なシャードキーを使用するか、 
- クエリ仕様でシャードキーまたは - _idフィールドを指定できます。
トランザクション
db.collection.deleteOne() は分散トランザクション内で使用できます。
トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。
重要
ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。
トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。
Oplog エントリ
db.collection.deleteOne()操作によってドキュメントが正常に削除されると、その操作によってoplog (操作ログ)にエントリが追加されます。 操作が失敗した場合、または削除するドキュメントが見つからなかった場合は、その操作によって oplog にエントリが追加されることはありません。
例
単一ドキュメントの削除
orders コレクションには、次の構造を持つドキュメントがあります。
db.orders.insertOne(    {       _id: ObjectId("563237a41a4d68582c2509da"),       stock: "Brent Crude Futures",       qty: 250,       type: "buy-limit",       limit: 48.90,       creationts: ISODate("2015-11-01T12:30:15Z"),       expiryts: ISODate("2015-11-01T12:35:15Z"),       client: "Crude Traders Inc."    } ) 
次の操作は、_id:
ObjectId("563237a41a4d68582c2509da") のオーダーを削除します。
try {    db.orders.deleteOne( { _id: ObjectId("563237a41a4d68582c2509da") } ); } catch (e) {    print(e); } 
この操作では以下が返されます。
{ acknowledged: true, deletedCount: 1 } 
次の操作は、 expirytsがISODate("2015-11-01T12:40:15Z")より大きい最初のドキュメントを削除します。
try {    db.orders.deleteOne( { expiryts: { $lt: ISODate("2015-11-01T12:40:15Z") } } ); } catch (e) {    print(e); } 
この操作では以下が返されます。
{ acknowledged: true, deletedCount: 1 } 
deleteOne() with Write Concern
3 つのノードからなるレプリカセットがある場合、次の操作では majority を w と、100 を wtimeout と指定します。
try {    db.orders.deleteOne(        { _id: ObjectId("563237a41a4d68582c2509da") },        { w: "majority", wtimeout: 100 }    ); } catch (e) {    print (e); } 
承認に wtimeout 制限時間を超える時間がかかると、次の例外が発生します。
WriteConcernError({    code: 64,    errmsg: "waiting for replication timed out",    errInfo: {      wtimeout: true,      writeConcern: {        w: "majority",        wtimeout: 100,        provenance: "getLastErrorDefaults"      }    } }) 
照合の指定
照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。
restaurants コレクションには、次のドキュメントがあります。
db.restaurants.insertMany( [    { _id: 1, category: "café", status: "Open" },    { _id: 2, category: "cafe", status: "open" },    { _id: 3, category: "cafE", status: "open" } ] ) 
次の操作には照合オプションが含まれます。
db.restaurants.deleteOne(    { category: "cafe", status: "Open" },    { collation: { locale: "fr", strength: 1 } } ) 
削除フィルターで strength: 1 との照合が指定されている場合、照合では大文字と小文字と文字の別個の違いを無視します。その結果、 フィルター 内の指定された大文字と小文字のバリエーションと完全に一致するドキュメントは存在しない場合でも、操作は引き続きドキュメントを一致させ、削除します。
削除操作の hint を指定する
mongosh で、次のドキュメントを含む students コレクションを作成します。
db.members.insertMany( [    { _id: 1, student: "Richard", grade: "F", points: 0 },    { _id: 2, student: "Jane", grade: "A", points: 60 },    { _id: 3, student: "Adam", grade: "F", points:  0 },    { _id: 4, student: "Ronan", grade: "D", points: 20 },    { _id: 5, student: "Noah", grade: "F", points:  0 },    { _id: 6, student: "Henry", grade: "A", points: 86 } ] ) 
次のインデックスをコレクションで作成します。
db.members.createIndex( { grade: 1 } ) 
次の削除操作は、インデックス { grade: 1 } を使用することを明示的に指定します。
db.members.deleteOne(    { points: { $lte: 20 }, grade: "F" },    { hint: { grade: 1 } } ) 
注意
存在しないインデックスを指定した場合、操作はエラーになります。
delete コマンドは以下を返します。
{ acknowledged: true, deletedCount: 1 } 
使用されているインデックスを表示するには、$indexStats パイプラインを使用できます。
db.members.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] ) 
$indexStats 出力の accesses.ops フィールドには、インデックスを使用した操作の数が表示されます。
Tip
複数のドキュメントを削除するには、
db.collection.deleteMany()