Mongodb Mongo只更新子文档中的一项,并在同一子文档中添加一项

Mongodb Mongo只更新子文档中的一项,并在同一子文档中添加一项,mongodb,Mongodb,这是我的收藏中的文档 { "_id" : ObjectId("5d766c18791adb12cc607d49"), "name" : "myapp", "openApp" : true, "appDeveloper" : "Arun", "environments" : [ { "environment_id" : ObjectId("

这是我的
收藏中的
文档

{
        "_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"
                                }
                        ]
                }
        ]
}
我想在
服务数组中运行一个只更新
服务id:ObjectId(“5d766c18791adb12cc607d46”)
的查询,然后添加一个新的
服务对象

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

db.app_attributes.update ({"_id" : ObjectId("5d766c18791adb12cc607d49")}, 

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

如果我理解正确,您希望更新其
service_id
ObjectId的子文档(“5d766c18791adb12cc607d46”)

您可以使用

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
    }
)