Nie można modyfikować wielu elementów tablicy w jednej operacji aktualizacji. W związku z tym będziesz musiał powtórzyć aktualizację, aby przenieść dokumenty, które wymagają modyfikacji wielu elementów tablicy. Możesz to zrobić, przechodząc przez każdy dokument w kolekcji, wielokrotnie stosując aktualizację za pomocą $elemMatch dopóki w dokumencie nie zostaną zastąpione wszystkie istotne komentarze, np.:
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);
})
Pamiętaj, że jeśli wydajność tej operacji jest wymagana dla twojej aplikacji, powinieneś znormalizować swój schemat tak, aby lokalizacja awatara użytkownika była przechowywana w pojedynczym dokumencie, a nie w każdym komentarzu.