sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB uppdaterar flera poster av array

Du kan inte ändra flera arrayelement i en enda uppdateringsåtgärd. Därför måste du upprepa uppdateringen för att migrera dokument som behöver flera arrayelement för att ändras. Du kan göra detta genom att iterera genom varje dokument i samlingen, upprepade gånger tillämpa en uppdatering med $elemMatch tills dokumentet har ersatt alla relevanta kommentarer, t.ex.:

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

Observera att om effektiviteten av denna operation är ett krav för din applikation, bör du normalisera ditt schema så att platsen för användarens avatar lagras i ett enda dokument, snarare än i varje kommentar.



  1. Hur modellerar man en många självrefererande relation med många föräldrar?

  2. MongoDb SafeMode jämför med WriteConcern

  3. slå upp i mongodb-aggregation

  4. Strategier för snabba sökningar av miljarder små dokument i MongoDB