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

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

{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.

Ответ 1

Вы можете обновить, используя следующее:

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

Подробнее о команде обновления: http://www.mongodb.org/display/DOCS/Updating#Updating

Ответ 2

обновление: этот ответ не является корректным обновлением!

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

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