Mongoose的updateOne方法中{overwrite:true}参数的作用是什么?
关于Mongoose
updateOne 中 overwrite:true 参数的作用 在Mongoose的updateOne方法里,overwrite:true的核心作用是把匹配到的目标文档完全替换成你传入的更新对象,和默认的部分更新行为完全不同。
默认行为与overwrite:true的差异
- 默认情况下,
updateOne是部分更新:只会修改你在第二个参数里指定的字段,文档里没被提及的原有字段会原封不动保留。 - 开启
overwrite:true后,会执行全量替换:匹配到的文档会被彻底替换成第二个参数的对象,原文档里未在更新对象中定义的字段会直接被删除。
示例对比
假设原有文档结构如下:
{ title: "旧标题", content: "旧内容", author: "张三", createTime: "2024-01-01" }
不带overwrite:true的执行结果
Article.updateOne( {title: "旧标题"}, {title: "新标题", content: "新内容"}, function(err){} )
执行后文档保留未修改的字段:
{ title: "新标题", content: "新内容", author: "张三", createTime: "2024-01-01" }
带overwrite:true的执行结果
Article.updateOne( {title: "旧标题"}, {title: "新标题", content: "新内容"}, {overwrite:true}, function(err){} )
执行后文档被完全替换,原有未指定字段被删除:
{ title: "新标题", content: "新内容" }
额外说明
updateOne搭配overwrite:true的效果,和直接调用replaceOne方法完全一致,只是写法不同。如果你的需求是全量替换文档,两种方式任选其一即可。
内容的提问来源于stack exchange,提问作者Ayush Goel
相关产品推荐
相关产品推荐

