MongoDB是否可以仅更新部分文档?

时间:2019-01-03 13:35:27

标签: database mongodb

我有这个:

//users collection:
{
  personal_info: {
    first_name: "John",
    address: {
      city: "New york",
      street: "A"
    }
  }
}

我要对此进行下一次更新:

req.body = {
  "address.street": "B"
}

db.users.update({}, {$set: req.body}, err => {
  ...
});

如您所见,我拿走了整个文档,并要求mongo仅更新集合中的更改。

这可能吗?

Mongo代替了整个文档并替换它并设置了一个新文档:

{
   personal_info: {
     first_name: "John",
     address: {
       street: "B"
     }
   }
} // notice that "address.city" is gone

1 个答案:

答案 0 :(得分:1)

您正在使用其他路径更新文档

您的更新将生成第一级地址,而无需处理您需要的字段。

基于您的req.body

db.users.update({}, {$set: req.body}

像这样更新文档

{ 
    "_id" : ObjectId("5c2e4872e44cfe4170bc1565"), 
    "personal_info" : {
        "first_name" : "John", 
        "address" : {
            "city" : "New york", 
            "street" : "A"
        }
    }, 
    "address" : {
        "street" : "B"
    }
}

因为您的地址在personal_info字段内

要执行所需的操作,必须指定正确的根目录。

db.sample.update({}, {$set: {"personal_info.address.street" : "B"}})
相关问题