我是
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.很混乱.