MongoDB更新数组中的错误子文档

时间:2015-01-31 13:25:09

标签: mongodb

我的gamefamilies系列看起来像这样

{
    "_id": ObjectId('54cc3ee7894ae60c1c9d6c74'),
    "game_ref_id": "REF123",
    ..
    "yearwise_details": [
    {
        "year": 1,
        ...
        "other_details": [
            {
                "type": "cash",
                "openingstock": 988
                ..
            },
            {
                "type": "FLU",
                "openingstock": 555
                ..
            },
            ..other items
        ]
    },
    {
        "year": 2,
        ...

        "other_details": [
            {
                "type": "cash",
                "openingstock": 3000,
                ....
            },
            ...
            {
                "type": "ghee",
                "openingstock": 3000,
                ...
            },
            ..
        ]
    }
]
}

我的更新查询

  

db.gamefamilies.update({“game_ref_id”:“REF123”,“teamname”:“manisha”,“yearwise_details.year”:2,“yearwise_details.other_details.type”:“ghee”},{“$设置“:{”yearwise_details.0.other_details。$。opensstock“:555}});

文档被正确拾取。我希望更新第2年的项目类型=“酥油”,而是更新第1年的第2项(类型FLU)。我做错了什么?

非常感谢任何帮助。

问候 MANISHA

1 个答案:

答案 0 :(得分:1)

不幸的是,目前还不支持嵌套的$ positional operator更新。

因此您可以使用

对更新进行硬编码
db.gamefamilies.update({"game_ref_id": "REF123",
                        "teamname": "manisha",
                        "yearwise_details.year": 2,
                        "yearwise_details.other_details.type": "ghee"},
                       {"$set":
                         {"yearwise_details.1.other_details.$.openingstock": 555}});

但请注意, yearwise_details.1.other_details 是硬编码,你想要数组的第二个值(它是0索引的,所以1引用第二个元素) 。我假设您在问题中找到了命令,因为它适用于数组的第一个元素。但它只能在第一个元素上工作,上面的命令只能在第二个元素上工作。