Подтвердить что ты не робот

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, он будет обновлен правильно. Он просто не возвращается из базы данных.

Это похоже на ошибку "глупого пользователя", но я не вижу этого. Любые идеи получили высокую оценку.

4b9b3361

Ответ 1

В Mongoose 4.0 значение по умолчанию для параметра new findByIdAndUpdatefindOneAndUpdate) изменилось на false (см. # 2262 примечаний к выпуску ). Это означает, что вам нужно явно установить параметр true для получения новой версии документа после применения обновления:

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