MongoDb - Как я могу обновить несколько элементов вложенного объекта, используя $ set? - PullRequest
10 голосов
/ 01 октября 2011

Допустим, у меня есть следующий документ:

{name: 'myDoc', nestedDoc: {a: 1, b: 2, c: 3}}

И я хотел бы объединить с nestedDoc новый объект:

{b: 20, c:30, d:40}

Таким образом, получившийся объект будет:

{name: 'myDoc', nestedDoc: {a: 1, b: 20, c: 30, d: 40}}

Как я могу сделать это в одном запросе?Я чувствую, что мне нужно несколько вызовов $ set, однако имена свойств объекта должны быть уникальными.Другими словами, я хотел бы сделать следующее:

db.myCollection.update({name: 'myDoc', nestedDoc: {$set: {b: 20}, $set: {c: 30}, $set: {d: 40}}); 

Некоторые дополнительные сведения: версия MongoDB - 1.8.2, и я использую собственный драйвер узла NodeJS.

Ответы [ 2 ]

24 голосов
/ 01 октября 2011

Обновление можно выполнить с помощью следующего:

db.myCollection.update({
    name: 'mydoc'
}, {
    $set: {
        'nestedDoc.b': 20,
        'nestedDoc.c': 30,
        'nestedDoc.d': 40
    }
})

Вот дополнительная информация о команде обновления: http://www.mongodb.org/display/DOCS/Updating#Updating

0 голосов
/ 21 июня 2019

это тоже работает в моем приложении и легко читается

db.myCollection.update({
    name: 'mydoc'
   }, 
   {
    $set: {
        nestedDoc:{
           b: 20,
           c: 30,
           d: 40,
       } 
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...