使用Mongoose Paginate报错:this.count is not a function 求助
关于mongoose paginate分页报错
TypeError: this.count is not a function的问题分析 报错信息
TypeError: this.count is not a function at Function.paginate
你的代码
分页调用代码
Stock.paginate({},{page, limit} ,function(err,result){ if (err) { return res.status(500).json({ message: 'Error occurred while fetching users.' }); } const { docs, total, limit, page, pages } = result; // console.log(docs) return res.json({ stock: docs, total, limit, page, pages }); })
Schema与插件注册代码
const StockSchema = new mongoose.Schema( { item: { type: String, }, quantity: { type: Number, } } ); StockSchema.plugin(mongoosePaginate) // mongoosePaginate(StockSchema); module.exports = mongoose.model("Stock", StockSchema);
可能的错误原因及解决方法
依赖版本不兼容
旧版mongoose-paginate插件依赖已被Mongoose废弃的count()方法,而Mongoose 5.x及以上版本已移除该方法,改用countDocuments()。如果你的Mongoose版本较新,但安装的是旧版分页插件,就会触发这个报错。
解决:卸载旧版插件,安装新版mongoose-paginate-v2,并修改导入和注册代码:npm uninstall mongoose-paginate npm install mongoose-paginate-v2然后修改Schema文件:
const mongoosePaginate = require('mongoose-paginate-v2'); StockSchema.plugin(mongoosePaginate);插件注册时机错误
如果在创建模型之后才注册插件,插件不会生效,导致paginate方法无法正确绑定模型的查询方法,进而出现this.count不存在的问题。
解决:确保在调用mongoose.model()之前完成插件注册,你的当前代码顺序是对的,但可以检查是否有其他地方提前初始化了Stock模型。参数格式或类型错误
检查page和limit是否为有效的数字类型,如果传入的是字符串或undefined,可能导致插件内部调用count方法时出现异常。
解决:在调用paginate前,先将page和limit转为数字:const pageNum = parseInt(page) || 1; const limitNum = parseInt(limit) || 10; Stock.paginate({}, { page: pageNum, limit: limitNum }, function(err, result) { // ... 后续代码 });插件导入错误
确认你导入的分页插件名称是否正确,比如如果安装的是mongoose-paginate-v2,但导入时还是用了mongoose-paginate,会导致插件无法正常注册。
解决:核对package.json中的依赖名称,确保导入语句与依赖名称一致。
内容的提问来源于stack exchange,提问作者Tech de Enigma
相关产品推荐
相关产品推荐

