Depois de mais algumas pesquisas, parece que a única maneira de modificar o array dentro de um array seria com alguma lógica externa para encontrar o índice do elemento que quero alterar. Fazer isso exigiria que cada alteração tivesse uma consulta de localização para localizar o índice e, em seguida, uma consulta de atualização para modificar a matriz. Este não parece ser o melhor caminho.
Link para um caso JIRA de 2010 solicitando vários elementos posicionais...
Como sempre saberei o ID do recurso, optei por revisar minha estrutura de documentos.
{
"_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"
},
}
},
]
},
Com a nova estrutura, as alterações podem ser feitas da seguinte maneira:
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "s86CbNBdqJnQ5NWaB"}, {$set: {"groups.$.features.1.name":"Blog Test 1"}});