Vous devez utiliser 2 concepts :l'opérateur positionnel de mongodb et simplement utiliser l'index numérique pour l'entrée que vous souhaitez mettre à jour.
L'opérateur positionnel vous permet d'utiliser une condition comme celle-ci :
{"heroes.nickname": "test"}
puis référencez l'entrée de tableau trouvée comme suit :
{"heroes.$ // <- the dollar represents the first matching array key index
Comme vous voulez mettre à jour la 2ème entrée du tableau dans "items", et que les clés du tableau sont indexées à 0 - c'est la clé 1.
Donc :
> db.denis.insert({_id:"43434", heroes : [{ nickname : "test", items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }]});
> db.denis.update(
{"heroes.nickname": "test"},
{$set: {
"heroes.$.items.1": "new_value"
}}
)
> db.denis.find()
{
"_id" : "43434",
"heroes" : [
{"nickname" : "test", "items" : ["", "new_value", "" ]},
{"nickname" : "test2", "items" : ["", "", "" ]}
]
}