鉴于此文档保存在 MongoDB
{ _id : ..., some_key: { param1 : "val1", param2 : "val2", param3 : "val3" } }
需要保存具有来自外部世界的新信息的param2对象param3
param2
param3
var new_info = { param2 : "val2_new", param3 : "val3_new" };
我想在对象的现有状态上合并/覆盖新字段,这样 param1 就不会被删除
这样做
db.collection.update( { _id:...} , { $set: { some_key : new_info } }
将导致 MongoDB 完全按照要求执行,并将 some_key 设置为该值。更换旧的。
{ _id : ..., some_key: { param2 : "val2_new", param3 : "val3_new" } }
让 MongoDB 只更新新字段的方法是什么(没有明确地一一说明)?得到这个:
{ _id : ..., some_key: { param1 : "val1", param2 : "val2_new", param3 : "val3_new" } }
我正在使用 Java 客户端,但任何示例都将不胜感激
如果我正确理解了这个问题,您想用另一个文档的内容更新一个文档,但只更新尚未存在的字段,并完全忽略已经设置的字段(即使是另一个值)。
没有办法在单个命令中做到这一点。
您必须首先查询文档,找出您想要的内容$set,然后更新它(使用旧值作为匹配过滤器,以确保您不会在两者之间获得并发更新)。
$set
您的问题的另一种解读是您对 感到满意$set,但不想明确设置所有字段。那么你将如何传递数据呢?
您知道您可以执行以下操作:
db.collection.update( { _id:...} , { $set: someObjectWithNewData }