MongoDB使用updateOne更新时,如何删除不再存在的字段?
解决MongoDB更新时删除非指定字段的问题
有两种常用方法可以实现更新时移除新数据中不存在的旧字段:
方法一:使用replaceOne完全替换文档
replaceOne会直接将匹配到的文档替换为你提供的新文档,原文档中未在新文档里出现的字段会被自动删除,同时支持upsert逻辑(匹配不到则插入新文档)。
执行命令:
db.testupd.replaceOne({'id': 12345}, {"id": 12345, "price": 222}, {upsert: true})
执行后,原文档的oldprice字段会被移除,最终文档仅包含_id(自动保留)、id和price字段。
方法二:在updateOne中使用$replaceRoot管道操作
如果需要通过更新管道实现,可以用$replaceRoot将新文档设置为根文档,同样能达到替换整个文档、删除多余字段的效果:
执行命令:
db.testupd.updateOne({'id': 12345}, [{$replaceRoot: {newRoot: {"id": 12345, "price": 222}}}], {upsert: true})
补充说明
你之前用$set的方式只会更新指定字段,不会删除原有文档中的其他字段,这就是oldprice保留的原因。上面两种方法本质都是用新文档覆盖原文档(除了自动生成的_id),从而移除所有未在新数据中定义的字段。
内容的提问来源于stack exchange,提问作者EdG
相关产品推荐
相关产品推荐

