findOneAndReplace()(替换并返回文档)

最后更新:2026-10-09

findOneAndReplace()(替换并返回文档)

findOneAndReplace()用一份新文档整体替换第一条匹配过滤条件的文档,并返回替换前或替换后的文档,例如`db.users.findOneAndReplace({ name: 'Bob' }, { name: 'Bob', age: 26 }, { returnDocument: 'after' })`。它与replaceOne()的区别在于能读回文档内容,适合需要拿到替换结果的场景。除_id外的所有字段都会被新文档覆盖。

分类写入
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

db.<集合>.findOneAndReplace(<过滤条件>, <新文档>, { returnDocument: 'after', upsert: <bool> })

⚙️ 参数

过滤条件匹配要替换文档的条件对象。
新文档完整的新文档,覆盖除_id外的所有字段。
returnDocument可选。'before'返回替换前文档,'after'返回替换后文档,默认'before'。

返回值:替换前(或替换后)的文档;无匹配且未开启upsert时返回null。

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// findOneAndReplace:整体替换Bob的文档并返回新文档
const doc = db.users.findOneAndReplace(
  { name: 'Bob' }, { name: 'Bob', age: 26, vip: true },
  { returnDocument: 'after' }
)
doc

运行结果:

{
  _id: ObjectId('64c8a1b20000000000000002'),
  name: 'Bob',
  age: 26,
  vip: true
}

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

QfindOneAndReplace和replaceOne有什么区别?
AreplaceOne()只返回统计数字;findOneAndReplace()返回替换前或替换后的文档本身。
QfindOneAndReplace能改_id吗?
A不能,新文档必须保留原_id,否则操作会报错。
Qupsert开启时findOneAndReplace返回什么?
A无匹配时会插入新文档并返回它;此时返回的_id就是新生成的_id。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏