Есть ли у MongoDB способ обновить документ, не удаляя существующие элементы, не содержащиеся в данных обновления? - PullRequest
0 голосов
/ 24 сентября 2019

Я использую MongoDB как с ядром .NET, так и с Node.js.Этот вопрос относится к проекту узла, над которым я работаю, но я думаю, что язык клиента не имеет отношения к моим вопросам.

У меня есть документ, в котором есть такие элементы, как имя и текущий адрес (add_current) ниже:

{
   "_id" : ObjectId("5d858718c1d9f856881dc9ce"),
   ...
   "name": "John Doe",
   "add_current" : 
   {
      "add1" : "456 Old Ave.",
      "city" : "Stafford",
      "state" : "VA",
      "zip" : "23234"
   },
   ...
}

Иногда я просто обновляю некоторые части дочернего объекта, например так:

const updateDocument2 = function (db, callback) {
    const collection = db.collection('documents');
    collection.update(
        { 
            '_id': ObjectID("5d858718c1d9f856881dc9ce") 
        },
        {
            $set: {
                name: "John Doe Jr.",
                add_current: {
                    add1: "123 New Street",
                }

            }
        }, function (err, result) {
            console.log("Updated the document");
            callback(result);
        });
}

Когда я выполняю $set выше, я удаляю поля city, state и zip.Я не хочу этого делать.

Я ищу наиболее эффективный способ обновления имени и add_current.add1 без удаления других полей (например, add_current.state).Я понимаю, что есть способы сделать это несколькими прикосновениями к записи данных (.findOne(...), затем .update(...)).Есть ли способ сделать это с помощью одного .update(...) касания?

1 Ответ

3 голосов
/ 24 сентября 2019

вы устанавливаете значение add_current на {add1: "123 New Street"}

try {$set:{"add_current.add1": "123 New Street"}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...