MongoDB更新数组中的字段

时间:2012-03-05 10:49:27

标签: php mongodb database

如何在albums数组中将“album1”设置为“我的相册”?我只知道它的_id

{
    "_id": ObjectId("4f41a5c7c32810e404000000"),
    "albums": {
    "0": {
        "_id": ObjectId("4f545d1bc328103812000000"),
        "name": "album1" 
    },
     "1": {
        "_id": ObjectId("4f545f56c328103c12000000"),
        "name": "album2" 
    },
    "2": {
        "_id": ObjectId("4f545f68c328103012000000"),
        "name": "album3" 
    },
    "3": {
        "_id": ObjectId("4f546642c328103c12000001"),
        "name": "album4" 
    }
}

1 个答案:

答案 0 :(得分:0)

您的架构不正确。如果你需要一个数组,你应该将它定义为这样,而不是使它成为一个地图(这是因为你的数组索引实际上是键,所以它是当前的。)

转换为数组:

{
    "_id": ObjectId("4f41a5c7c32810e404000000"),
    "albums": [
    {
        "_id": ObjectId("4f545d1bc328103812000000"),
        "name": "album1" 
    },
    {
        "_id": ObjectId("4f545f56c328103c12000000"),
        "name": "album2" 
    },
    {
        "_id": ObjectId("4f545f68c328103012000000"),
        "name": "album3" 
    },
    {
        "_id": ObjectId("4f546642c328103c12000001"),
        "name": "album4" 
    }]
}

然后使用位置运算符进行更新:

db.col.update({'albums._id':..}, {$set:{'albums.$.name':"My Album"}})

请注意,在嵌入元素中使用_id最多会让人感到困惑。