MongoDB更新嵌套字段

时间:2018-09-27 12:54:38

标签: mongodb set

在MongoDB中,您如何使用 $set 更新嵌套值?

例如,考虑具有以下文档的集合

{
  _id: ObjectId("5a7e395e20a31e44e0e7e284"),
  name: "a",
  address: [{ street: "123", town: "bar" }]
}

如何将street文档中嵌入的address字段从"123"更新为"Main Street"

3 个答案:

答案 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" } }
    )