Можете да използвате само $
позиционен оператор за масиви от едно ниво. Във вашия случай имате вложен масив (heros
е масив и в него всеки герой има spells
масив).
Ако знаете индексите на масивите, можете да използвате изрични индекси, когато правите актуализация, като:
> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});