微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – findOneAndUpdate()在upsert中返回null值

我是 mongodb和mongoose的新手.

请帮帮我!我陷入了下面我描述的这个问题.

我有一个静态方法,我从控制器(路由器)调用.

IDCounterSchema.statics.getNextID = function(collectionName,callback){

    this.collection.findOneAndUpdate(
        {name: collectionName},{$inc: {sequence:1}},{new: true,upsert: true},callback
    );
};

但是,当我在初始应用程序启动后第一次调用它时,它会返回null值.

{ lastErrorObject: { updatedExisting: false,n: 0 },value: null,ok: 1 } // 1 means the execution succeeded 
          // in fact,i see the inserted data in mongo database.

根据this mongodb document,当upsert& new属性为true时,它不应为null.

因为我在返回的对象的value属性中得到null,它会导致此错误并粉碎我的应用程序.

TypeError: Cannot read property 'sequence' of null

但是,在第二次启动应用程序之后,当我调用相同的静态方法时,它可以正常工作而不会出现任何错误.

任何想法如何解决这个问题?

解决方法

根据2.0 node.js本机驱动程序 documentation,控制findOneAndUpdate是否返回原始文档或新文档的选项称为returnoriginal,而不是new.

所以你的代码需要看起来像这样:

this.collection.findOneAndUpdate(
    {name: collectionName},{returnoriginal: false,callback
);

但是通过使用Model.findOneAndUpdate将该选项命名为new,直接在Mongoose中执行此操作可能会更好:

this.findOneAndUpdate(
    {name: collectionName},callback
);

链接到的文档适用于MongoDB shell中的findAndModify,其中该选项也称为new.很混乱.

原文地址:https://www.jb51.cc/nodejs/241230.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐