sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB aktualizuje více záznamů pole

V jedné operaci aktualizace nelze upravit více prvků pole. Proto budete muset aktualizaci opakovat, abyste mohli migrovat dokumenty, které vyžadují úpravu více prvků pole. Můžete to udělat tak, že budete procházet každý dokument v kolekci a opakovaně aplikovat aktualizaci pomocí $elemMatch dokud nebudou v dokumentu nahrazeny všechny příslušné komentáře, např.:

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

Všimněte si, že pokud je pro vaši aplikaci požadavkem efektivita této operace, měli byste své schéma normalizovat tak, aby umístění uživatelského avatara bylo uloženo v jediném dokumentu, nikoli v každém komentáři.



  1. mongodb $in limit

  2. jak ignorovat duplicitní dokumenty při použití insertMany v mongodb php knihovně?

  3. mongodb výkon čtení/zápisu a mongo hosting v cloudu

  4. jak spustit nativní dotaz mongodb s funkcí data mongodb v spring-data-mongodb?