首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongo仅更新子文档中的一个项目,并在同一个子文档中添加一个项目

Mongo仅更新子文档中的一个项目,并在同一个子文档中添加一个项目
EN

Stack Overflow用户
提问于 2019-09-10 00:02:01
回答 1查看 15关注 0票数 0

这是我的collection中的document

代码语言:javascript
复制
{
        "_id" : ObjectId("5d766c18791adb12cc607d49"),
        "name" : "myapp",
        "openApp" : true,
        "appDeveloper" : "Arun",
        "environments" : [
                {
                        "environment_id" : ObjectId("5d766c18791adb12cc607d45"),
                        "environment_name" : "production_env_updated",
                        "environment_type" : "prod",
                        "services" : [
                                {
                                        "service_id" : ObjectId("5d766c18791adb12cc607d46"),
                                        "service_name" : "some_updated",
                                        "service_type" : "..."
                                },
                                {
                                        "service_id" : ObjectId("5d766d45791adb12cc607d4a"),
                                        "service_name" : "updated 2",
                                        "service_type" : "..."
                                }
                        ]
                },
                {
                        "environment_id" : ObjectId("5d766c18791adb12cc607d48"),
                        "environment_name" : "demo_env",
                        "environment_type" : "stage",
                        "services" : [
                                {
                                        "service_id" : ObjectId("5d766d45791adb12cc607d4b"),
                                        "service_name" : "perfectly new",
                                        "service_type" : "perfect"
                                }
                        ]
                }
        ]
}

我想运行一个只更新services-array中的"service_id" : ObjectId("5d766c18791adb12cc607d46")的查询,然后添加一个新的service-object

我执行了下面的查询,但不知道如何进一步

代码语言:javascript
复制
db.app_attributes.update ({"_id" : ObjectId("5d766c18791adb12cc607d49")}, 

{ '$set': {"environments.services.service_id" : ObjectId("5d766c18791adb12cc607d46") :  {
                                        "service_id" : ObjectId("5d766c18791adb12cc607d46"),
                                        "service_name" : "sdfsdf",
                                        "service_type" : "..."
                                }}} 
)
EN

回答 1

Stack Overflow用户

发布于 2019-09-10 00:32:04

如果我理解正确的话,您希望更新service_idObjectId("5d766c18791adb12cc607d46")的子文档。

您可以使用Filtered Positional Operator完成此操作

代码语言:javascript
复制
db.app_attributes.update(
    {"_id" : ObjectId("5d766c18791adb12cc607d49")}, 
    {
        $set: {
            "environments.$[].services.$[element]": {
                "service_id" : ObjectId("5d766c18791adb12cc607d46"),
                "service_name" : "Updated Service Name",
                "service_type" : "Updated Service Type"
            }
        }
    },
    {
        arrayFilters: [
            {"element.service_id": ObjectId("5d766c18791adb12cc607d46")}
        ], 
        multi: true
    }
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57857499

复制
相关文章

相似问题

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