Dopo qualche altra ricerca, sembra che l'unico modo per modificare l'array all'interno di un array sarebbe con una logica esterna per trovare l'indice dell'elemento che voglio cambiare. In questo modo ogni modifica richiederebbe una query di ricerca per individuare l'indice e quindi una query di aggiornamento per modificare la matrice. Questo non sembra il modo migliore.
Link a un caso JIRA del 2010 che richiedeva più elementi posizionali...
Dal momento che conoscerò sempre l'ID della funzione, ho deciso di rivedere la struttura del mio documento.
{
"_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"
},
}
},
]
},
Con la nuova struttura, le modifiche possono essere apportate nel modo seguente:
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "s86CbNBdqJnQ5NWaB"}, {$set: {"groups.$.features.1.name":"Blog Test 1"}});