我的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
答案 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
引用第二个元素) 。我假设您在问题中找到了命令,因为它适用于数组的第一个元素。但它只能在第一个元素上工作,上面的命令只能在第二个元素上工作。