Не можете да модифицирате множество елементи на масив в една операция за актуализиране. Следователно ще трябва да повторите актуализацията, за да мигрирате документи, които се нуждаят от промяна на множество елементи от масив. Можете да направите това, като преминете през всеки документ в колекцията, многократно прилагайки актуализация с $elemMatch
докато в документа бъдат заменени всички съответни коментари, напр.:
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); })
Имайте предвид, че ако ефективността на тази операция е изискване за вашето приложение, трябва да нормализирате вашата схема, така че местоположението на аватара на потребителя да се съхранява в един документ, а не във всеки коментар.