1

这就是我在我的数据库中所拥有的。

{     
    "_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 不带引号且不带 add { "$oid" :

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

1 回答 1

2

您可以将 $ 运算符与更新一起使用。假设您的集合命名为图像,您可以使用以下查询:

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

于 2013-08-12T16:43:50.343 回答