MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose aktualisiert mehrere Dokumente, aktualisiert nichts

Nachdem ich einige Stunden damit verbracht hatte, herauszufinden, wo der Fehler lag und warum die Datenbank nicht aktualisiert wurde, fand ich heraus, dass die Datenbank tatsächlich aktualisiert wurde. Das Problem bestand darin, dass ich das Update in der Mongo-Shell überprüfte und nachdem ich es über die Post-Anfrage von nodejs aktualisiert hatte, es in der Shell nicht als aktualisiert angezeigt wurde. Wenn ich jedoch die Labels console.log() einfüge, wurde sie aktualisiert. Also habe ich das Problem weiter untersucht und herausgefunden, dass das Problem nicht die Mongo-Shell war, sondern die falsche Verwendung des Mongoose-Befehlsupdates. Mir fehlte das Callback-Argument. Nach dem Hinzufügen der Callback-Funktion wurden die Daten in der Mongo-Shell sofort aktualisiert.

Anstatt also:

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

Es darf nicht vergessen werden Callback hinzuzufügen:

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

Oder wie die doppelte Antwort vorschlägt, exec():

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