我遇到了一个我以前从未见过的问题,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);
    });

数据库中的原始文档如下所示:

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 1'
}

updateObj将进入如下状态:

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 2'
}  

回调返回的模型与原始模型相同,而不是updatedObj.

这感觉像是一个"愚蠢的用户"错误,但我看不出来.非常感谢您的任何想法.

推荐答案

在Mongoose 4.0中,new选项findByIdAndUpdate(和findOneAndUpdate)的默认值已更改为false,这意味着返回旧文档(请参阅release notes中的#2262).因此,在应用更新后,您需要显式地将选项设置为true以获取新版本的文档:

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

Node.js相关问答推荐

如何从 github 编译第三方扩展?

为什么在调用数据库调用时我的参数没有定义?

Azure Function 在 2022 年 4 月 26 日禁用将“用户”字段设置为 HTTP 请求对象

使用 mongoose 查找过去 7 天的注册用户总数

为什么 req.params.id 返回“ undefined”未定义?

解决并行保存到 mongodb

node和mongoDB聚合数据时的输入字段函数

如何在 mongoDB 中用值 0 填充缺失的文档?

Node.js 17.0.1 Gatsby 错误-“数字信封例程::不支持 ... ERR_OSSL_EVP_UNSUPPORTED”

Node.js:语法错误:无法在模块外使用 import 语句

是否有 Angular / Angular-CLI 和 Node.js 的兼容性列表?

Node.js mongodb 驱动程序异步/等待查询

Nodemon 错误:已达到文件观察者数量的系统限制

什么是nestjs错误处理方式(业务逻辑错误vs.http错误)?

mac 中缺少对 /usr/local/lib/node_modules 的写访问权限

UnhandledPromiseRejectionWarning:此错误源于在没有 catch 块的情况下抛出异步函数内部

npm 错误! 404 未找到:事件流@3.3.6

package.json 中的节点引擎 8.x 或 10.x

Javascript ES6 TypeError:没有'new'就不能调用类构造函数客户端

nodejs v10.3.0 的 gulp 任务问题:src\node_contextify.cc:629: Assertion `args[1]->IsString()' failed