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

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

MongoDB とドライバー

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

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

次の値を返します。

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

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

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

注意

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

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

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

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

注意

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

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

ドキュメント

Optional. A document or string that specifies the index to use to support the query predicate.

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

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

For an example, see Specify hint for Delete Operations.

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 にエントリが追加されることはありません。

このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。

次の操作と、 year が 1910 より前のすべての document が削除されます。

db.movies.deleteMany( { "year": { $lt: 1910 } } )
{ acknowledged: true, deletedCount: 4 }

同様に、この操作は、rated が "G" に等しく、かつ year が 1950 より前のdocumentをすべて削除します。

db.movies.deleteMany( { "rated": "G", "year": { $lt: 1950 } } )
{ acknowledged: true, deletedCount: 9 }

次の操作と、year が cutoffYear 変数よりも前のすべての document が削除されます。この例では、3 秒の時間制限も設定しています。

db.movies.deleteMany(
{ $expr: { $lt: [ "$year", "$$cutoffYear" ] } },
{
let: { cutoffYear: 1910 },
maxTimeMS: 3000
}
)
{ acknowledged: true, deletedCount: 4 }

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" を持つ document と一致します。

db.movies.deleteMany(
{ rated: "g", year: { $lt: 1950 } },
{ collation: { locale: "en", strength: 2 } }
)
{ acknowledged: true, deletedCount: 9 }

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 フィールドには、インデックスを使用した操作の数が表示されます。

このページを評価