Mongoose findByIdAndUpdate没有返回正确的模型

Jon*_*Red 84 mongoose mongodb node.js

我有一个问题,我以前没有看到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);
    });
Run Code Online (Sandbox Code Playgroud)

db中的原始文档如下所示:

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 1'
}
Run Code Online (Sandbox Code Playgroud)

updateObj进入如下:

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 2'
}  
Run Code Online (Sandbox Code Playgroud)

从回调返回的模型与原始模型相同,而不是updatedObj.如果我查询数据库,它已被正确更新.它只是没有从数据库返回.

这感觉就像一个'愚蠢的用户'错误,但我看不到它.任何想法都非常感激.

Joh*_*yHK 242

在Mongoose 4.0中,(和)new选项的默认值已更改为(请参阅发行说明的#2262 ).这意味着在应用更新后,您需要显式设置选项以获取新版本的文档:findByIdAndUpdatefindOneAndUpdatefalsetrue

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...
Run Code Online (Sandbox Code Playgroud)

  • 哇!他们做出了多么糟糕的决定!这是首先进行查找而不是更新的唯一要点. (13认同)
  • 我不明白为什么有人宁愿在响应中使用旧文档而不是新文档 (5认同)
  • 也被'create'方法的返回值的更改所困扰.干杯伙计,如果可以,我会两次投票. (4认同)
  • 还有关于猫鼬项目的更新文档的PR,所以希望它不会抓住任何其他人. (4认同)
  • 哦,小伙子,谢谢你@JohnnyHK.这破坏了我.当然我想要新的.可能更符合API,但不是真正的常识...如果我更新某些内容,我希望看到更改.谢谢猫鼬... (3认同)