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

MongoDB opdaterer flere registreringer af array

Du kan ikke ændre flere array-elementer i en enkelt opdateringshandling. Du bliver derfor nødt til at gentage opdateringen for at migrere dokumenter, som kræver, at flere array-elementer ændres. Du kan gøre dette ved at gentage hvert dokument i samlingen, gentagne gange anvende en opdatering med $elemMatch indtil dokumentet har erstattet alle relevante kommentarer, f.eks.:

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

Bemærk, at hvis effektiviteten af ​​denne handling er et krav for din applikation, bør du normalisere dit skema, således at placeringen af ​​brugerens avatar er gemt i et enkelt dokument, snarere end i hver kommentar.



  1. Sådan forbinder du fjernbetjening mongodb med pymongo

  2. MongoDB $minut

  3. MongoDB $allElementsTrue

  4. Hvordan sorterer MongoDB poster, når der ikke er angivet nogen sorteringsrækkefølge?