首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改嵌入式嵌入式属性(MongoDB)的值

修改嵌入式嵌入式属性(MongoDB)的值
EN

Stack Overflow用户
提问于 2014-05-15 07:31:48
回答 1查看 113关注 0票数 1

我想知道是否有可能更新一个属性的嵌入值(包含两个深度级别)?

例如,如果我有以下文档:

代码语言:javascript
复制
{
    _id: ObjectId("5372523e4f611ef8255c5735"),

    places: [
        {
            idPlace: 2,
            namePlace: "Name of the place 2",
            typePlace: "Type of the place 2"
            },
            screens: [
                {
                    idScreen: 1,
                    nameScreen: "Name 1 of the screen",
                    statusScreen: false
                },
                {
                    idScreen: 2,
                    nameScreen: "Name 2 of the screen",
                    statusScreen: false
                },
                {
                    idScreen: 3,
                    nameScreen: "Name 3 of the screen",
                    statusScreen: false
                }
        },
        {
            idPlace: 3,
            namePlace: "Name of the place 3",
            typePlace: "Type of the place 3"
            },
            screens: [
                {
                    idScreen: 5,
                    nameScreen: "Name 5 of the screen",
                    statusScreen: false
                },
                {
                    idScreen: 6,
                    nameScreen: "Name 6 of the screen",
                    statusScreen: false
                },
                {
                    idScreen: 7,
                    nameScreen: "Name 7 of the screen",
                    statusScreen: false
                }
        }
    ]
}

我希望将'idScreen': 5的属性'idScreen': 5的值修改为true。因此,我尝试了以下命令(根据post Updating embedded document property in Mongodb):

代码语言:javascript
复制
db.mycollection.update(  {'places.screens': {$elemMatch: {'idScreen': 5} }},  { $set: { "online": true }},   { multi: true } );

但是这会在文档的根目录中创建一个属性'online': true,而不修改我想要的属性的值。

你知道出了什么问题吗?

最佳Loic

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-15 07:51:06

理论上,您应该定位运算符$来匹配特定项并更新它。但问题是,您需要使用两个位置运算符$来匹配位置在位置和屏幕上的位置。不幸的是,还不支持使用两个位置运算符,参见https://jira.mongodb.org/browse/SERVER-831

因此,您无法在一个查询中更新文档。

但是,您可以使用{‘places.creens.idScreen’:5}查询找到所有必需的文档,然后根据数组中已知的位置更新文档。

编辑:更新数组中特定元素的代码

代码语言:javascript
复制
db.coll.update(
   {'places.screens.idScreen': 5},
   {$set:{"places.0.screens.0.statusScreen":true}} 
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23671901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档