Sie können nur den $
verwenden Positionsoperator für einstufige Arrays. In Ihrem Fall haben Sie ein verschachteltes Array (heros
ist ein Array, und darin hat jeder Held einen spells
Array).
Wenn Sie die Indizes der Arrays kennen, können Sie bei einer Aktualisierung explizite Indizes verwenden, wie zum Beispiel:
> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});