MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB atualiza vários registros de array


Você não pode modificar vários elementos de matriz em uma única operação de atualização. Assim, você terá que repetir a atualização para migrar documentos que precisam de vários elementos do array para serem modificados. Você pode fazer isso iterando em cada documento da coleção, aplicando repetidamente uma atualização com $elemMatch até que o documento tenha todos os seus comentários relevantes substituídos, por exemplo:
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);
})

Observe que, se a eficiência dessa operação for um requisito para seu aplicativo, você deverá normalizar seu esquema de forma que a localização do avatar do usuário seja armazenada em um único documento, em vez de em todos os comentários.