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

Mongoose actualiza varios documentos no actualiza nada

Después de pasar algunas horas tratando de averiguar dónde estaba el error y por qué no estaba actualizando la base de datos, descubrí que en realidad sí actualizó la base de datos. El problema era que estaba revisando la actualización en Mongo Shell y después de actualizarla a través de la solicitud de publicación de nodejs, no apareció en el Shell como actualizado. Sin embargo, cuando consola. log () las etiquetas, se actualizó. Así que investigué el problema más a fondo y descubrí que el problema no era el shell mongo, sino el uso incorrecto de la actualización del comando mongoose. Me faltaba el argumento de devolución de llamada. Después de agregar la función de devolución de llamada, los datos se actualizaron en el shell mongo inmediatamente.

Así que en lugar de hacer:

Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true})

No debe olvidarse agregar devolución de llamada:

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...

O como la respuesta duplicada sugiere ejecutar exec():

Label.update({'_id': { $in: post.labelIds }}, {$addToSet: {postIds:req.body.id}}, {multi: true}).exec()