deleteMany() (複数ドキュメントの削除)
最終更新:2026-10-09
deleteMany() (複数ドキュメントの削除)
deleteMany() はフィルタに一致するすべてのドキュメントを削除し、deletedCount を返します。古いログの一掃やユーザーの無効化など、一括クリーンアップの主力です。警告: 空フィルタ {} はコレクション全体を空にします。実行前にフィルタを必ず確認してください。削除は元に戻せません。リスクのある操作では、先に `db.users.countDocuments({ status: 'expired' })` で影響範囲を確認しましょう。
| カテゴリ | 書き込み |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.deleteMany(<filter>, { writeConcern: <options> })
⚙️ パラメータ
| フィルター条件 | 削除対象のドキュメントに一致する述語。空の {} はすべてを削除します。 |
|---|---|
| writeConcern | 任意。書き込み保証(write concern)。 |
戻り値:DeleteResult: { acknowledged, deletedCount }。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// deleteMany: 18歳未満のユーザーを全員削除する
db.users.deleteMany({ age: { $lt: 18 } })
出力:
{ acknowledged: true, deletedCount: 5 }
📌 注意事項
- 空フィルタ {} はコレクション内のすべてのドキュメントを削除する。危険
- 大量削除ではインデックスを使い、コレクションスキャンを避ける
- 元に戻せない。先にバックアップするか countDocuments で影響を評価する
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QdeleteMany に空フィルタを渡すとどうなりますか?
A空フィルタ {} はすべてに一致し、コレクション全体を削除します。誤って実行しないように注意してください。
QdeleteMany と drop の違いは何ですか?
AdeleteMany() はドキュメントを削除しますが、コレクションとインデックスは残します。drop() はコレクション自体を削除し、インデックスとメタデータも含まれます。
QdeleteMany が削除した件数を知るには?
A結果の deletedCount を読みます。例: const r = db.users.deleteMany({status: 'del'}); r.deletedCount