deleteMany()(批量删除)
最后更新:2026-10-09
deleteMany()(批量删除)
deleteMany()删除集合中所有匹配过滤条件的文档,返回deletedCount表示实际删除数量。它是批量清理数据(如清理过期日志、下线用户数据)的主力方法。注意:传空条件{}会清空整个集合,操作前务必确认过滤条件正确。删除操作不可逆,高危操作建议先`db.users.countDocuments({ status: 'expired' })`评估影响面。
| 分类 | 写入 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.deleteMany(<过滤条件>, { writeConcern: <选项> })
⚙️ 参数
| 过滤条件 | 匹配要删除文档的条件对象;空{}表示删除全部。 |
|---|---|
| writeConcern | 可选。写入关注级别。 |
返回值:DeleteResult对象:{ acknowledged, deletedCount }。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// deleteMany:删除所有年龄小于18的用户
db.users.deleteMany({ age: { $lt: 18 } })
运行结果:
{ acknowledged: true, deletedCount: 5 }
📌 注意事项
- 空条件{}会删除集合内全部文档,是危险操作
- 删除数量大时建议结合索引,避免全表扫描
- 删除不可恢复,批量删除前先备份或用countDocuments评估
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QdeleteMany传空条件会怎样?
A空条件{}会匹配并删除集合中的全部文档,相当于清空集合,务必避免误操作。
QdeleteMany和drop有什么区别?
AdeleteMany()按条件删文档但保留集合和索引;drop()删掉整个集合(含索引和元数据),需要重新创建。
Q如何知道deleteMany删了多少条?
A读取返回结果的deletedCount字段即可,例如const r = db.users.deleteMany({status: 'del'}); r.deletedCount。