deleteOne() - 删除单个文档
📑 目录
deleteOne() 方法删除集合中第一个匹配筛选条件的文档。
语法
参数
filter(必需)
类型: Object
用于匹配要删除的文档的筛选条件。使用 MongoDB 查询操作符。
options(可选)
类型: Object
返回值
类型: Promise<Object>
返回一个包含删除结果的对象:
核心特性
✅ 只删除第一个匹配的文档
即使有多个文档匹配筛选条件,deleteOne() 也只删除第一个匹配的文档。
✅ 自动缓存失效
删除成功后,monSQLize 会自动清理相关的缓存键。
✅ 慢查询监控
超过阈值(默认 1000ms)的删除操作会自动记录警告日志。
常见场景
场景 1: 删除单个用户
场景 2: 清理过期数据
场景 3: 删除特定状态的记录
场景 4: 使用索引提示优化性能
场景 5: 设置操作超时
与其他方法的区别
vs deleteMany
vs findOneAndDelete
错误处理
无效的筛选条件
操作超时
写关注错误
性能优化建议
1. 使用索引
确保筛选条件中的字段有索引:
2. 使用索引提示
对于复杂查询,明确指定使用哪个索引:
3. 设置合理的超时
4. 使用精确的筛选条件
注意事项
⚠️ 删除是不可逆的
⚠️ 删除顺序不确定
如果有多个文档匹配,删除哪个是不确定的(除非使用排序):
⚠️ 删除不影响索引
删除文档不会删除索引,索引会自动更新。
⚠️ 缓存失效的范围
自动缓存失效会清理整个集合的缓存,不仅仅是被删除的文档:
相关方法
- deleteMany() - 删除所有匹配的文档
- findOneAndDelete() - 原子地查找并删除文档,返回被删除的文档
- updateOne() - 更新单个文档(软删除的替代方案)
示例代码
完整的示例代码请参考 examples/docs/delete.ts