Ich habe ein Problem, das ich zuvor noch nicht gesehen habe, dass das Mongoose findByIdAndUpdate im Rückruf nicht das richtige Modell zurückgibt.
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 Datenbank sieht folgendermaßen aus:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
Das UpdateObj sieht folgendermaßen aus:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
Das vom Rückruf zurückgegebene Modell ist identisch mit dem ursprünglichen Modell, nicht mit dem aktualisiertenObj. Wenn ich die Datenbank abfrage, wurde sie korrekt aktualisiert. Es wird einfach nicht aus der Datenbank zurückgegeben.
Dies fühlt sich wie ein "dummer Benutzer" -Fehler an, aber ich kann ihn nicht sehen. Irgendwelche Ideen sehr geschätzt.
Antworten:
In Mongoose 4.0 wurde der Standardwert für die
new
OptionfindByIdAndUpdate
(undfindOneAndUpdate
) in geändertfalse
(siehe # 2262 der Versionshinweise ). Dies bedeutet, dass Sie die Option explizit festlegen müssentrue
, um die neue Version des Dokuments abzurufen, nachdem das Update angewendet wurde:quelle