Anda hanya dapat menggunakan $ operator posisi untuk array tingkat tunggal. Dalam kasus Anda, Anda memiliki array bersarang (heros adalah larik, dan di dalamnya setiap pahlawan memiliki spells susunan).
Jika Anda mengetahui indeks array, Anda dapat menggunakan indeks eksplisit saat melakukan pembaruan, seperti:
> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});