findOneAndDelete()(删除并返回文档)
最后更新:2026-10-09
findOneAndDelete()(删除并返回文档)
findOneAndDelete()删除第一条匹配过滤条件的文档,并返回被删除的文档本身,例如`db.users.findOneAndDelete({ name: 'Cara' })`。与deleteOne()只返回统计数字不同,它能拿到被删文档的完整内容,适合需要归档或审计删除数据的场景。无匹配时返回null。
| 分类 | 写入 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.findOneAndDelete(<过滤条件>, { projection: <字段> })
⚙️ 参数
| 过滤条件 | 匹配要删除文档的条件对象。 |
|---|---|
| projection | 可选。控制返回被删文档的哪些字段。 |
返回值:被删除的文档;无匹配时返回null。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// findOneAndDelete:删除名字为Cara的用户并打印其记录
const removed = db.users.findOneAndDelete({ name: 'Cara' })
removed
运行结果:
{
_id: ObjectId('64c8a1b20000000000000003'),
name: 'Cara',
age: 30
}
📌 注意事项
- 返回被删除文档本身,便于归档审计
- 只删除第一条匹配文档
- 无匹配返回null而非报错
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
QfindOneAndDelete和deleteOne有什么区别?
AdeleteOne()只返回deletedCount;findOneAndDelete()返回被删文档的完整内容,可用于归档和审计。
QfindOneAndDelete无匹配时返回什么?
A返回null,不会抛错。可据此判断过滤条件是否有匹配文档。
QfindOneAndDelete能控制返回哪些字段吗?
A可以,用projection选项指定,例如{projection: {name: 1}}只返回名字字段。