更新mongodb中的子对象

时间:2013-08-12 16:18:40

标签: mongodb

这就是我的数据库中的内容。

{     
    "_id": { "$oid" : "1111" },
    "gallery": {
        "images": [
        {
            "image": "test1.jpg",
            "_id": { "$oid" : "1111a" }
        },
        {
            "image": "test2.jpg",
            "_id": { "$oid" : "1111b" }
        },
        {
            "image": "test3.jpg",
            "_id": { "$oid" : "1111c" }
        }
      ]
    }
}
,{     
    "_id": { "$oid" : "2222" },
    "gallery": {
        "images": [
        {
            "image": "test1.jpg",
            "_id": { "$oid" : "2222a" }
        }
      ]
    }
}

我想更新第一个元素(_id:“1111”)的第二个元素(image:“test2.jpg”)。 结果应该是

        ...
        {
            "image": "test2new.jpg",
            "_id": { "$oid" : "1111b" }
        },
        ...

我有第二张图片“1111b”的_id。 我该怎么办?

更新
我尝试过这个查询,但它不起作用。

{ 
    '_id':{'$oid' : '1111' }
   ,'gallery.image': $elemMatch:{ '_id':{'$oid':'1111b' } }
}
,{ 
    $set:{ 'gallery.images.$.image':'test2new.jpg' }
}


_id没有引号且没有添加{“$ oid”:

{ 
    { _id : '1111' }
   ,{ 'gallery.image': $elemMatch:{ _id:'1111b' } }
}
,{ 
    $set:{ 'gallery.images.$.image':'test2new.jpg' }
}

1 个答案:

答案 0 :(得分:2)

您可以将$运算符与update一起使用。假设您的集合是命名映像,您可以使用以下查询:

db.images.update({'_id.oid':'1111','gallery.images':{'$elemMatch':{'image':'test2.jpg'}}},{'$set':{'gallery.images.$.image':'test2new.jpg'}})

您可以在此处详细了解:http://docs.mongodb.org/manual/core/update/#update-a-document-element-without-specifying-its-position