Po nějakém dalším výzkumu to vypadá, že jediný způsob, jak upravit pole v poli, by bylo s nějakou vnější logikou najít index prvku, který chci změnit. To by vyžadovalo, aby každá změna měla vyhledávací dotaz k nalezení indexu a poté aktualizační dotaz k úpravě pole. To se nezdá jako nejlepší způsob.
Odkaz na případ JIRA z roku 2010 požadující více pozičních prvků...
Protože vždy budu znát ID funkce, rozhodl jsem se upravit strukturu svého dokumentu.
{
"_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"
},
}
},
]
},
S novou strukturou lze změny provádět následujícím způsobem:
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "s86CbNBdqJnQ5NWaB"}, {$set: {"groups.$.features.1.name":"Blog Test 1"}});