这是我的collection中的document
{
"_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
我执行了下面的查询,但不知道如何进一步
db.app_attributes.update ({"_id" : ObjectId("5d766c18791adb12cc607d49")},
{ '$set': {"environments.services.service_id" : ObjectId("5d766c18791adb12cc607d46") : {
"service_id" : ObjectId("5d766c18791adb12cc607d46"),
"service_name" : "sdfsdf",
"service_type" : "..."
}}}
)发布于 2019-09-10 00:32:04
如果我理解正确的话,您希望更新service_id为ObjectId("5d766c18791adb12cc607d46")的子文档。
您可以使用Filtered Positional Operator完成此操作
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
}
)https://stackoverflow.com/questions/57857499
复制相似问题