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.