MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose met à jour plusieurs documents ne met rien à jour

Après quelques heures passées à essayer de trouver où se trouvait l'erreur et pourquoi elle ne mettait pas à jour la base de données, j'ai découvert qu'elle avait effectivement mis à jour la base de données. Le problème était que je vérifiais la mise à jour dans le shell mongo et après l'avoir mise à jour via la demande de publication de nodejs, elle n'apparaissait pas dans le shell comme mise à jour. Cependant, lorsque je console.log() les étiquettes, elles ont été mises à jour. J'ai donc étudié le problème plus en détail et j'ai découvert que le problème n'était pas le shell mongo, mais une utilisation incorrecte de la mise à jour de la commande mongoose. Il me manquait l'argument de rappel. Après avoir ajouté la fonction de rappel, les données ont été mises à jour immédiatement dans le shell mongo.

Donc au lieu de faire :

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

Il ne faut pas oublier d'ajouter le 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 comme une réponse en double suggère d'exécuter exec() :

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