【问题标题】:Update subobject in mongodb更新 mongodb 中的子对象
【发布时间】:2013-08-13 22:32:56
【问题描述】:

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

{     
    "_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' }
}

【问题讨论】:

  • 你尝试了什么? (C)
  • 这里已经回答了:stackoverflow.com/questions/9247007/…
  • 谢谢,我看到了那个帖子,但它有点不同,因为我有这种 id "_id": { "$oid" : "1111b" }

标签: mongodb


【解决方案1】:

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

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

【讨论】:

  • 好的,我发现了问题...它在服务器/浏览器上运行良好。但是查询在 MondoHub 上不起作用......无论如何......我用我的解决方案进行更新:)
猜你喜欢
  • 2017-05-21
  • 2019-08-29
  • 1970-01-01
  • 2017-11-23
  • 2014-07-24
  • 1970-01-01
  • 2022-07-23
  • 2017-05-23
  • 1970-01-01
相关资源
最近更新 更多