V jedné operaci aktualizace nelze upravit více prvků pole. Proto budete muset aktualizaci opakovat, abyste mohli migrovat dokumenty, které vyžadují úpravu více prvků pole. Můžete to udělat tak, že budete procházet každý dokument v kolekci a opakovaně aplikovat aktualizaci pomocí $elemMatch
dokud nebudou v dokumentu nahrazeny všechny příslušné komentáře, např.:
db.collection.find().forEach( function(doc) { do { db.collection.update({_id: doc._id, comments:{$elemMatch:{user:"test", avatar:{$ne:"new_avatar.jpg"}}}}, {$set:{"comments.$.avatar":"new_avatar.jpg"}}); } while (db.getPrevError().n != 0); })
Všimněte si, že pokud je pro vaši aplikaci požadavkem efektivita této operace, měli byste své schéma normalizovat tak, aby umístění uživatelského avatara bylo uloženo v jediném dokumentu, nikoli v každém komentáři.