Mongoose findByIdAndUpdate не возвращает правильную модель
У меня проблема, которую я раньше не видел, поскольку Mongoose findByIdAndUpdate не возвращал правильную модель в обратном вызове.
Здесь код:
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);
});
Оригинальный документ в db выглядит следующим образом:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 1'
}
Запуск updateObj выглядит следующим образом:
{
_id: 1234
descriptors: Array[2],
name: 'Test Name 2'
}
Модель, возвращенная из обратного вызова, идентична исходной модели, а не обновленной Obj.
Если я запрошу db, он будет обновлен правильно. Он просто не возвращается из базы данных.
Это похоже на ошибку "глупого пользователя", но я не вижу этого. Любые идеи получили высокую оценку.
Ответы
Ответ 1
В Mongoose 4.0 значение по умолчанию для параметра new
findByIdAndUpdate
(и findOneAndUpdate
) изменилось на false
(см. # 2262 примечаний к выпуску ). Это означает, что вам нужно явно установить параметр true
для получения новой версии документа после применения обновления:
Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...