MongoDB とドライバー
このページでは、 mongosh メソッドについて説明します。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。
定義
db.collection.deleteMany()filterに一致するすべてのドキュメントをコレクションから削除します。次の値を返します。 次の要素を含むドキュメント: acknowledgedtrue操作が 書込み保証( write concern )付きで実行された場合は としてブール値false(書込み保証が無効になっている場合はdeletedCount削除されたドキュメントの数を含みます
注意
大きなコレクション内の全ドキュメントを削除する場合は、コレクションを削除して再作成する方が速い場合があります。コレクションを削除する前に、コレクションのすべてのインデックスに注意してください。元のコレクションに存在していたインデックスをすべて再作成する必要があります。元のコレクションがシャーディングされている場合は、再作成されたコレクションもシャーディングする必要があります。
コレクションの削除について詳しくは、db.collection.drop() を参照してください。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
deleteMany()メソッドの構文は次のとおりです。
db.collection.deleteMany( <filter>, { writeConcern: <document>, collation: <document>, hint: <document>|<string>, maxTimeMS: <int>, let: <document> } )
Parameter | タイプ | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
ドキュメント | クエリ演算子を使用して削除条件を指定します。 コレクション内のすべてのドキュメントを削除するには、空のドキュメント形式( | |||||||||||
ドキュメント | 任意。書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。 トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。 | |||||||||||
ドキュメント | 任意。 操作に使用する照合を指定します。 照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。 照合オプションの構文は次のとおりです。 照合を指定する場合、 照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合( コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。 1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。 | |||||||||||
ドキュメント | 任意。 クエリ述語をサポートするために使用するインデックスを指定するドキュメントまたは string です。 このオプションには、インデックス仕様ドキュメントまたはインデックス名の文字列を指定できます。 存在しないインデックスを指定した場合、操作はエラーになります。 の例については、「 | |||||||||||
integer | 任意。タイムアウトする前に削除する操作を実行する時間制限をミリ秒単位で指定します。 | |||||||||||
ドキュメント | 任意。 変数のリストを含むドキュメントを指定します。これにより、変数をクエリテキストから分離することで、コマンドの読みやすさを向上させることができます。 ドキュメントの構文は次のとおりです。 変数は式によって返された値に設定され、その後は変更できません。 コマンド内の変数の値にアクセスするには、二重ドル記号の接頭辞( 結果のフィルタリングに変数を使用するには、
|
動作
シャーディングされたコレクション
deleteMany()がトランザクションの外で実行されると、複数のシャードを対象とする操作は、クラスター内のすべてのシャードに適用されます。deleteMany()がトランザクション内で実行される場合、複数のシャードを対象とする操作は、関連するシャードのみを対象とします。
単一ドキュメントの削除
単一ドキュメントを削除するには、代わりに db.collection.deleteOne() を使用します。
あるいは、_id などのユニークインデックスの構成フィールドを使用します。
トランザクション
db.collection.deleteMany() は分散トランザクション内で使用できます。
トランザクションで実行される場合、操作の書込み保証 (write concern)を明示的に設定しないでください。トランザクションで書込み保証を使用するには、「トランザクション書込み保証」を参照してください。
重要
ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。
トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。
プライマリ ノードの障害
db.collection.deleteMany()はドキュメントを 1 つずつ削除します。 db.collection.deleteMany()操作中にプライマリ ノードが失敗した場合、セカンダリ ノードからまだ削除されていないドキュメントはコレクションから削除されません。
Oplog エントリ
db.collection.deleteMany() 操作によって 1 つ以上のドキュメントが正常に削除されると、その操作によって削除された各ドキュメント用のエントリが oplog(操作ログ)に追加されます。操作が失敗した場合、または削除するドキュメントが見つからない場合は、その操作によって oplog にエントリが追加されることはありません。
例
このページの例では、付属の sample_mflixサンプルデータセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「サンプルデータセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
複数のドキュメントの削除
次の操作と、 year が 1910 より前のすべてのドキュメントが削除されます。
db.movies.deleteMany( { "year": { $lt: 1910 } } )
{ acknowledged: true, deletedCount: 4 }
同様に、この操作は、rated が "G" に等しく、かつ year が 1950 より前のドキュメントをすべて削除します。
db.movies.deleteMany( { "rated": "G", "year": { $lt: 1950 } } )
{ acknowledged: true, deletedCount: 9 }
タイムアウトとクエリ変数を伴う deleteMany()
次の操作と、year が cutoffYear 変数よりも前のすべてのドキュメントが削除されます。この例では、3 秒の時間制限も設定しています。
db.movies.deleteMany( { $expr: { $lt: [ "$year", "$$cutoffYear" ] } }, { let: { cutoffYear: 1910 }, maxTimeMS: 3000 } )
{ acknowledged: true, deletedCount: 4 }
書込み保証を伴う deleteMany()
3つのノードから成るレプリカセットにおいて、次の操作は w の majority と wtimeout の 100 を指定します。
db.movies.deleteMany( { "rated": "G", "year": { $lt: 1950 } }, { writeConcern: { w: "majority", wtimeout: 100 } } )
{ acknowledged: true, deletedCount: 9 }
確認応答にかかる時間が wtimeout の制限を超えると、 MongoDB は書込み保証 (write concern)エラーをスローします。
照合の指定
照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。
次の操作では、英語のロケールとstrength: 2 とともに照合オプションを使用します。フィルターrated: "g" rated: "G"は、コレクションに保存されている を持つドキュメントと一致します。
db.movies.deleteMany( { rated: "g", year: { $lt: 1950 } }, { collation: { locale: "en", strength: 2 } } )
{ acknowledged: true, deletedCount: 9 }
削除操作に hint を指定
rated フィールドと metacritic フィールドにインデックスを作成します。
db.movies.createIndex( { rated: 1 } ) db.movies.createIndex( { metacritic: 1 } )
次の削除操作は、インデックス { rated: 1 } を使用することを明示的に指定します。
db.movies.deleteMany( { "metacritic": { $lte: 15 }, "rated": "PG" }, { hint: { rated: 1 } } )
{ acknowledged: true, deletedCount: 7 }
注意
存在しないインデックスを指定した場合、操作はエラーになります。
使用されているインデックスを表示するには、$indexStats パイプラインを使用できます。
db.movies.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )
$indexStats 出力の accesses.ops フィールドには、インデックスを使用した操作の数が表示されます。