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

Zug*_*alt 11 set mongodb

可以说我有以下文件:

{name: 'myDoc', nestedDoc: {a: 1, b: 2, c: 3}}
Run Code Online (Sandbox Code Playgroud)

我想与nestedDoc合并一个新对象:

{b: 20, c:30, d:40}
Run Code Online (Sandbox Code Playgroud)

所以最终的对象是:

{name: 'myDoc', nestedDoc: {a: 1, b: 20, c: 30, d: 40}}
Run Code Online (Sandbox Code Playgroud)

如何在单个查询中执行此操作?我觉得我需要多个$ set调用,但对象属性名称必须是唯一的.换句话说,我希望我能做到以下几点:

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

一些额外的细节是mongodb版本是1.8.2,我使用nodejs节点本机驱动程序.

小智 25

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

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

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