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

Mongoose atualizar vários documentos não atualiza nada


Depois de algumas horas tentando descobrir onde estava o erro e por que não estava atualizando o banco de dados, descobri que realmente atualizava o banco de dados. O problema era que eu estava verificando a atualização no shell do mongo e depois de atualizá-la sobre a solicitação de postagem do nodejs, ela não apareceu no shell como atualizada. No entanto, quando eu console.log() os rótulos, ele foi atualizado. Então, investiguei mais o problema e descobri que o problema não era o shell do mongo, mas o uso incorreto da atualização do comando do mongoose. Eu estava perdendo o argumento de retorno de chamada. Depois de adicionar a função de retorno de chamada, os dados foram atualizados no shell do mongo imediatamente.

Então ao invés de fazer:
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true})

Não se deve esquecer de adicionar callback:
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}, function(err, affected) {
   if(err)
      console.log(err)
   else
      console.log(affected)
      // After successful update, redirect here to another page...

Ou como resposta duplicada sugere executar exec():
Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}).exec()