sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB actualiza múltiples registros de matriz

No puede modificar varios elementos de matriz en una sola operación de actualización. Por lo tanto, tendrá que repetir la actualización para migrar documentos que necesitan que se modifiquen varios elementos de la matriz. Puede hacer esto iterando a través de cada documento en la colección, aplicando repetidamente una actualización con $elemMatch hasta que se reemplacen todos los comentarios relevantes del documento, por ejemplo:

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

Tenga en cuenta que si la eficiencia de esta operación es un requisito para su aplicación, debe normalizar su esquema de modo que la ubicación del avatar del usuario se almacene en un solo documento, en lugar de en cada comentario.