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

标签 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 节点原生驱动程序。

最佳答案

您可以使用以下方法进行更新:

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

这里是关于更新命令的更多信息:

关于MongoDb - 如何使用 $set 更新嵌套对象的多个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617915/

相关文章:

node.js - 防止保存空文档

algorithm - 最大矩形集覆盖

java - 将 Java Set 转换为PreparedStatement setString 方法的参数

redis - 大型集合的 SSCAN 与 SMEMBERS 资源使用情况

javascript - 从提示符中获取数组并插入 MongoDB 数据库

javascript - 无法在node/express js中导入模块

javascript - 列出 friend 之间最常见的游戏

javascript - mongo/express 通过 id 获取用户获取对象 = null

c++ Set - 使用链表的数据结构

mysql - 短路UNION? (如果第一个子句没有结果,只执行第二个子句)