2015-05-24 12 views
45

Ich habe ein Problem, das ich vorher noch nicht gesehen habe mit dem Mongoose findByIdAndUpdate, das nicht das korrekte Modell im Callback zurückgibt.Mongoes findByIdAndUpdate gibt kein korrektes Modell zurück

Hier ist der Code:

var id = args._id; 
    var updateObj = {updatedDate: Date.now()}; 
    _.extend(updateObj, args); 

    Model.findByIdAndUpdate(id, updateObj, function(err, model) { 
     if (err) { 
      logger.error(modelString +':edit' + modelString +' - ' + err.message); 
      self.emit('item:failure', 'Failed to edit ' + modelString); 
      return; 
     } 
     self.emit('item:success', model); 
    }); 

Das Originaldokument in der db wie folgt aussieht:

{ 
    _id: 1234 
    descriptors: Array[2], 
    name: 'Test Name 1' 
} 

Die updateObj in das sieht aus wie gehen:

{ 
    _id: 1234 
    descriptors: Array[2], 
    name: 'Test Name 2' 
} 

Das Modell zurück aus dem Callback ist identisch mit dem ursprünglichen Modell, nicht das updatedObj. Wenn ich die db abfrage, wurde es korrekt aktualisiert. Es wird einfach nicht von der Datenbank zurückgegeben.

Das fühlt sich an wie ein "blöder Benutzer" Fehler, aber ich kann es nicht sehen. Irgendwelche Ideen sehr geschätzt.

+1

, dass eine ehrfürchtige Stelle ist. Und eine Erinnerung, warum ich alle meine Projekte auf Versionen halten muss, da dieses Paket seine eigenen Komponententests bestanden hat. Vielen Dank. – JonRed

Antwort

157

In Mongoose 4.0 ist der Standardwert für die new Option von findByIdAndUpdate (und findOneAndUpdate) zu false geändert hat (siehe # 2262 die release notes). Dies bedeutet, dass Sie die Option true explizit setzen, die neue Version des Dokuments zu erhalten, nachdem das Update angewandt wird:

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {... 
+3

Wurde auch von den Änderungen der Rückgabewerte der 'create' Methode abgefangen. Prost, Kumpel, ich würde zweimal abstimmen, wenn ich könnte. – JonRed

+3

Legen Sie auch eine PR für aktualisierte Dokumente auf dem Mungo-Projekt, so hoffentlich wird es niemandem sonst auffallen. – JonRed

+1

Oh Junge danke @JohnnyHK. Das hat mich zerstört. Natürlich möchte ich das neue zurückhaben. Mehr konsistent mit der API vielleicht, aber nicht wirklich mit gesundem Menschenverstand ... wenn ich etwas aktualisiere, würde ich gerne die Änderungen sehen. Danke Mungo ... – Peege151

Verwandte Themen