在MongoDB中,您如何使用 $set
更新嵌套值?
例如,考虑具有以下文档的集合人:
{
_id: ObjectId("5a7e395e20a31e44e0e7e284"),
name: "a",
address: [{ street: "123", town: "bar" }]
}
如何将street
文档中嵌入的address
字段从"123"
更新为"Main Street"
?
答案 0 :(得分:0)
像这样将$set
和$
postion operator一起使用:
db.collection.update(
{ "address.street": "123" },
{ "$set": { "address.$.street": "Main Street" } }
)
答案 1 :(得分:0)
您必须使用$[<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"
}
]
}
答案 2 :(得分:-1)
谢谢,但是我找到了解决方法:
db.collection.updateMany(
{ "address.street": "123" },
{ "$set": { "address.$[].street": "Main Street" } }
)