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,
}
}
})