さらに調査した結果、配列内の配列を変更する唯一の方法は、変更する要素のインデックスを見つけるための外部ロジックを使用することであるように見えます。これを行うには、すべての変更で、インデックスを見つけるための検索クエリと、配列を変更するための更新クエリが必要になります。これは最善の方法ではないようです。
複数の位置要素を要求する2010JIRAケースへのリンク...
機能のIDは常にわかっているので、ドキュメント構造を修正することにしました。
{
"_id" : "v5y8nggzpja5Pa7YS",
"name" : "Example",
"display_name" : "EX1",
"groups" : [
{
"_id" : "s86CbNBdqJnQ5NWaB",
"name" : "Group1",
"display_name" : "G1",
"features" : {
"1" : {
type : "blog",
name : "[blog name]"
owner_id : "ga5YgvP5yza7pj8nS"
},
}
},
]
},
新しい構造では、次の方法で変更を加えることができます。
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "s86CbNBdqJnQ5NWaB"}, {$set: {"groups.$.features.1.name":"Blog Test 1"}});