U kunt niet meerdere array-elementen in één updatebewerking wijzigen. U moet de update dus herhalen om documenten te migreren waarvoor meerdere array-elementen moeten worden gewijzigd. U kunt dit doen door elk document in de verzameling te doorlopen en herhaaldelijk een update toe te passen met $elemMatch totdat alle relevante opmerkingen in het document zijn vervangen, bijvoorbeeld:
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);
})
Merk op dat als efficiëntie van deze bewerking een vereiste is voor uw toepassing, u uw schema moet normaliseren zodat de locatie van de avatar van de gebruiker wordt opgeslagen in een enkel document, in plaats van in elke opmerking.