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

db.コレクション.deleteMany()(mongoshメソッド)

db.collection.deleteMany()

MongoDB とドライバー

このページでは、mongosh メソッドのドキュメントについて記載しています。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。

filter に一致するすべてのドキュメントをコレクションから削除します。

次の値を返します。

次の要素を含むドキュメント:

  • 操作が書き込み保証付きで実行された場合はブール値acknowledged(true )、書き込み保証が無効になっている場合はfalseになります

  • deletedCount 削除されたドキュメントの数を含みます

注意

大きなコレクション内の全ドキュメントを削除する場合は、コレクションを削除して再作成する方が速い場合があります。コレクションを削除する前に、コレクションのすべてのインデックスに注意してください。元のコレクションに存在していたインデックスをすべて再作成する必要があります。元のコレクションがシャーディングされている場合は、再作成されたコレクションもシャーディングする必要があります。

コレクションの削除について詳しくは、db.collection.drop() を参照してください。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

db.collection.deleteMany() の構文は次のとおりです。

db.collection.deleteMany( <filter>, { writeConcern: <document>, collation: <document>, hint: <document>|<string>, maxTimeMS: <int>, let: <document> })
Parameter
タイプ
説明

ドキュメント

クエリ演算子を使用して削除条件を指定します。

コレクション内のすべてのドキュメントを削除するには、空のドキュメント形式({ })を渡します。

ドキュメント

任意。書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。

トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。

ドキュメント

任意。

任意。操作に使用する照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合オプションの構文は次のとおりです。

collation: { locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean>}

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合(db.createCollection() を参照)には、コレクションの照合が使用されます。

コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。

1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

ドキュメント

任意。 クエリ述語をサポートするために使用する インデックス を指定するドキュメントまたは string です。

このオプションには、インデックス仕様ドキュメントまたはインデックス名の文字列を指定できます。

存在しないインデックスを指定した場合、操作はエラーになります。

例については、「削除操作での hint の指定」を参照してください。

integer

任意。タイムアウトする前に削除する操作を実行する時間制限をミリ秒単位で指定します。

ドキュメント

任意。

変数のリストを含むドキュメントを指定します。これにより、変数をクエリテキストから分離することで、コマンドの読みやすさを向上させることができます。

ドキュメントの構文は次のとおりです。

{ <variable_name_1>: <expression_1>, ..., <variable_name_n>: <expression_n>}

変数は式によって返された値に設定され、その後は変更できません。

コマンド内の変数の値にアクセスするには、二重ドル記号の接頭辞($$)を $$<variable_name> 形式にした変数名とともに使用します。たとえば次のとおりです。$$targetTotal

結果のフィルタリングに変数を使用するには、$expr 演算子内の変数にアクセスする必要があります。

letと変数を使用した例については、let 変数を使用した更新を参照してください。

  • deleteMany() がトランザクションの外で実行されると、複数のシャードを対象とする操作は、クラスター内のすべてのシャードに適用されます。

  • deleteMany() がトランザクション内で実行される場合、複数のシャードを対象とする操作は、関連するシャードのみを対象とします。

警告

チャンクの同時移行のため、指定されたフィルターに一致するすべてのドキュメントを削除せずに deleteMany() が実行される場合があります。一致するすべてのドキュメントを確実に削除するには、次のいずれかの操作を実行します。

  • 同じフィルターを持つ対応する検索クエリでドキュメントが返されないまで、deleteMany() メソッドを反復的に実行します。

  • トランザクション内で deleteMany() を実行します。

  • バランシングウィンドウをスケジュールして、チャンク移行が特定の時間のみ実行されるようにし、指定されたウィンドウ外でdeleteMany() 操作を実行します。

単一ドキュメントを削除するには、代わりに db.collection.deleteOne() を使用します。

あるいは、_id などのユニークインデックスの構成フィールドを使用します。

deleteMany() は分散トランザクション内で使用できます。

トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。

重要

ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。

トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。

deleteMany() ドキュメントを 1 つずつ削除する。deleteMany()操作中にプライマリ ノードが失敗した場合、セカンダリノードからまだ削除されていないドキュメントはコレクションから削除されません。

db.collection.deleteMany() 操作によって 1 つ以上のドキュメントが正常に削除されると、その操作によって削除された各ドキュメント用のエントリが 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." })

次の操作は、client : "Crude Traders Inc." のすべてのドキュメントを削除します。

try { db.orders.deleteMany( { "client" : "Crude Traders Inc." } );} catch (e) { print (e);}

この操作では以下が返されます。

{ "acknowledged" : true, "deletedCount" : 10 }

次の操作は、stock : "Brent Crude Futures" かつ limit が 48.88 より大きいすべてのドキュメントを削除します。

try { db.orders.deleteMany( { "stock" : "Brent Crude Futures", "limit" : { $gt : 48.88 } } );} catch (e) { print (e);}

この操作では以下が返されます。

{ "acknowledged" : true, "deletedCount" : 8 }

次の操作では、client が targetClient 変数と等しいすべてのドキュメントを削除し、時間制限を 3 秒に設定します。

try { db.orders.deleteMany( { $expr: { $eq: ["$client", "$$targetClient"] } }, { let: { targetClient: "Crude Traders Inc." }, maxTimeMS: 3000 } );} catch (e) { print(e);}

この操作では以下が返されます。

{ "acknowledged" : true, "deletedCount" : 1 }

3つのノードから成るレプリカセットにおいて、次の操作は w の majority と wtimeout の 100 を指定します。

try { db.orders.deleteMany( { "client" : "Crude Traders Inc." }, { writeConcern: { 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: "A" }, { _id: 2, category: "cafe", status: "a" }, { _id: 3, category: "cafE", status: "a" }] )

次の操作には照合オプションが含まれます。

db.restaurants.deleteMany( { category: "cafe", status: "A" }, { collation: { locale: "fr", strength: 1 } })

mongosh で、次のドキュメントを含む members コレクションを作成します。

db.members.insertMany([ { "_id" : 1, "member" : "abc123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" }, { "_id" : 3, "member" : "lmn123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 4, "member" : "pqr123", "status" : "D", "points" : 20, "misc1" : "Deactivated", "misc2" : null }, { "_id" : 5, "member" : "ijk123", "status" : "P", "points" : 0, "misc1" : null, "misc2" : null }, { "_id" : 6, "member" : "cde123", "status" : "A", "points" : 86, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment" }])

コレクションに次のインデックスを作成します。

db.members.createIndex( { status: 1 } )db.members.createIndex( { points: 1 } )

次の削除操作は、インデックス { status: 1 } を使用することを明示的に指定します。

db.members.deleteMany( { "points": { $lte: 20 }, "status": "P" }, { hint: { status: 1 } })

注意

存在しないインデックスを指定した場合、操作はエラーになります。

delete コマンドは以下を返します。

{ "acknowledged" : true, "deletedCount" : 3 }

使用されているインデックスを表示するには、$indexStats パイプラインを使用できます。

db.members.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )

$indexStats 出力の accesses.ops フィールドには、インデックスを使用した操作の数が表示されます。

このページを評価