MongoDB возможно ли обновить только часть документа? - PullRequest
0 голосов
/ 03 января 2019

У меня есть это:

//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 берет весь документ и заменяет его и устанавливает новый документ:

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

1 Ответ

0 голосов
/ 03 января 2019

Вы обновляете документ по другому пути

Ваше обновление создает адрес первого уровня без работы с нужным вам полем.

На основе вашего 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 поле

Для того, чтобы делать то, что вы хотите, вы должны правильно указать root.

db.sample.update({}, {$set: {"personal_info.address.street" : "B"}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...