Můžete použít pouze $
poziční operátor pro jednoúrovňová pole. Ve vašem případě máte vnořené pole (heros
je pole a v něm má každý hrdina spells
pole).
Pokud znáte indexy polí, můžete při aktualizaci použít explicitní indexy, například:
> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});