deleteBatch - 批量删除文档
📑 目录
概述
deleteBatch 方法通过流式查询分批删除大量文档,适用于需要删除成千上万甚至百万级数据的场景,避免一次性删除造成的内存压力和性能问题。
特点
- ✅ 流式查询 - 基于
find()的流式API,恒定内存占用 - ✅ 进度监控 - 实时查看删除进度和百分比
- ✅ 错误处理 - 支持 stop/skip/collect/retry 四种策略
- ✅ 自动重试 - 网络不稳定时自动重试失败批次
- ✅ 缓存失效 - 自动失效相关集合缓存
- ✅ 慢查询日志 - 集成到现有慢查询日志系统
适用场景
API 参数说明
方法签名
参数详解
第一个参数:filter(必需)
- 类型:
object - 说明:删除条件,与
deleteMany相同
第二个参数:options(可选)
返回值
进度回调参数
使用示例
1. 基础用法 - 清理过期日志
2. 带进度监控 - 清理大量数据
输出示例:
3. 不预先 count - 避免性能开销
4. 错误处理 - stop 策略(默认)
5. 错误处理 - skip 策略
6. 错误处理 - retry 策略(推荐)
7. 错误处理 - collect 策略
8. 复杂查询条件
9. 使用 comment 追踪操作
性能优化建议
1. 批次大小选择
2. 是否预先 count
3. 索引优化
4. 错误策略选择
常见问题
Q1: deleteBatch 和 deleteMany 有什么区别?
建议:
- 数据量 < 10000 条 → 使用
deleteMany - 数据量 ≥ 10000 条 → 使用
deleteBatch
Q2: deleteBatch 会造成数据不一致吗?
答: 否。deleteBatch 使用 MongoDB 的游标快照隔离,保证数据一致性。
Q3: 如何知道删除了哪些文档?
Q4: deleteBatch 会触发慢查询日志吗?
答: 会。如果删除操作超过阈值(默认 500ms),会记录慢查询日志。
Q5: 可以在事务中使用 deleteBatch 吗?
答: 可以,但需要注意:
Q6: 如何估算删除时间?
参考资料
更新日期: 2025-12-30
版本: v1.0