You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一项目中同时使用mongoose-paginate-v2和mongoose-aggregate-paginate-v2

两个Mongoose分页插件共存方案

两个分页插件冲突的核心原因:默认都会为Schema注入名为paginate的方法,如果你采用全局注册插件的方式,后注册的插件会覆盖之前插件注入的同名方法,就会出现你遇到的报错。


方案1:按Schema单独注册插件(推荐)

不要使用全局注册插件的方式,针对需要不同分页能力的Schema单独注册对应的插件即可,代码示例如下:

// 引入依赖
const mongoose = require('mongoose');
const mongoosePaginate = require('mongoose-paginate-v2');
const mongooseAggregatePaginate = require('mongoose-aggregate-paginate-v2');

// 示例1:仅需要普通分页能力的模型
const userSchema = new mongoose.Schema({
  username: String,
  phone: String
});
userSchema.plugin(mongoosePaginate);
const User = mongoose.model('User', userSchema);

// 示例2:仅需要聚合分页能力的模型
const orderSchema = new mongoose.Schema({
  userId: mongoose.Types.ObjectId,
  amount: Number,
  createTime: Date
});
orderSchema.plugin(mongooseAggregatePaginate);
const Order = mongoose.model('Order', orderSchema);

这种方式下两个插件的注册范围完全隔离,不会出现方法覆盖问题。


方案2:同一模型需要同时使用两种分页能力

如果某个业务模型同时需要普通分页和聚合分页能力,可以在注册聚合分页插件时自定义方法名,避免覆盖:

const productSchema = new mongoose.Schema({
  name: String,
  price: Number,
  categoryId: mongoose.Types.ObjectId
});
// 先注册普通分页插件,保留默认的paginate方法名
productSchema.plugin(mongoosePaginate);
// 注册聚合分页插件时自定义方法名
productSchema.plugin(mongooseAggregatePaginate, {
  customName: 'aggregatePaginate'
});
const Product = mongoose.model('Product', productSchema);

// 调用时区分方法即可
// 普通分页查询
Product.paginate(query, options)
// 聚合分页查询
Product.aggregatePaginate(aggregate, options)

内容的提问来源于stack exchange,提问作者CARLV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:45:00