MongoDb - 如何使用$ set更新嵌套对象的多个元素?

时间:2011-10-01 03:16:36

标签: 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节点本机驱动程序。

2 个答案:

答案 0 :(得分:24)

您可以使用以下内容进行更新:

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

以下是有关update命令的更多信息: http://www.mongodb.org/display/DOCS/Updating#Updating

答案 1 :(得分:-1)

这在我的应用程序中也有效,而且易于阅读

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