Mam problem, którego wcześniej nie widziałem z Mongoose findByIdAndUpdate, który nie zwraca prawidłowego modelu w wywołaniu zwrotnym.
Oto kod:
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);
});
Oryginalny dokument w bazie danych wygląda następująco:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
AktualizacjaObj wygląda następująco:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
Model zwrócony z wywołania zwrotnego jest identyczny z modelem oryginalnym, a nie zaktualizowanymObj. Jeśli zapytam o bazę danych, została ona poprawnie zaktualizowana. Po prostu nie jest zwracany z bazy danych.
To wygląda na błąd „głupiego użytkownika”, ale nie widzę tego. Wszelkie pomysły mile widziane.
Odpowiedzi:
W Mongoose 4.0 domyślna wartość
new
opcjifindByIdAndUpdate
(ifindOneAndUpdate
) została zmieniona nafalse
(patrz # 2262 informacji o wydaniu ). Oznacza to, że musisz jawnie ustawić opcjętrue
pobierania nowej wersji dokumentu po zastosowaniu aktualizacji:Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...
źródło