您必须使用$[<identifier>](位置更新运算符)来更新匹配的地址(此处为 street="123" 和 town="bar")
使用这个略有不同的模型(只是添加地址以便更好地理解):
{
"_id" : ObjectId("5a7e395e20a31e44e0e7e284"),
"name" : "a",
"address" : [
{
"street" : "123",
"town" : "bar"
},
{
"street" : "Lower Street",
"town" : "bar"
},
{
"street" : "123",
"town" : "foo"
}
]
}
要应用的查询:
db['01'].update(
{"_id" : ObjectId("5a7e395e20a31e44e0e7e284")},
{$set:{"address.$[current].street":"Main Street"}},
{ arrayFilters: [{current:{street:"123","town":"bar"}} ]}
)
将导致:
{
"_id" : ObjectId("5a7e395e20a31e44e0e7e284"),
"name" : "a",
"address" : [
{
"street" : "Main Street",
"town" : "bar"
},
{
"street" : "Lower Street",
"town" : "bar"
},
{
"street" : "123",
"town" : "foo"
}
]
}