MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB aggiorna più record di array

Non è possibile modificare più elementi della matrice in un'unica operazione di aggiornamento. Pertanto, dovrai ripetere l'aggiornamento per migrare i documenti che richiedono la modifica di più elementi dell'array. Puoi farlo scorrendo ogni documento nella raccolta, applicando ripetutamente un aggiornamento con $elemMatch fino a quando il documento non avrà sostituito tutti i relativi commenti, ad es.:

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);
})

Tieni presente che se l'efficienza di questa operazione è un requisito per la tua applicazione, dovresti normalizzare il tuo schema in modo tale che la posizione dell'avatar dell'utente sia archiviata in un unico documento, anziché in ogni commento.