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

TypeScript中使用mongoose-paginate-v2分页无结果问题求助

问题:mongoose-paginate-v2分页返回空结果(集合确认存在数据)

可能原因及排查方案

1. 字段命名不匹配(核心嫌疑)

你的IOfflineMacroAction接口定义的是下划线命名的字段(created_at、updated_at、deleted_at),但Schema中:

  • timestamps默认生成createdAt、updatedAt(驼峰格式)
  • 自定义删除字段是deletedAt(驼峰格式)

如果MongoDB集合中实际存储的是下划线命名的字段,mongoose会因为字段名不匹配无法正确映射数据,最终导致查询返回空。

解决方案:
统一字段命名风格,修改Schema的timestamps配置和删除字段名:

const offlineMacroActionSchema: Schema = new Schema({
    name: { type: String, required: true },
    is_child: { type: Boolean, default: false },
    order: { type: Number, default: 100 },
    deleted_at: { // 改为下划线命名
        type: Date,
        default: null
    }
},
{
    // 指定timestamps生成下划线格式字段
    timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
    toJSON: { virtuals: true },
    toObject: { virtuals: true }
});

2. 分页Options参数异常

你未提供options变量的具体内容,如果其中包含错误的过滤条件(如match规则错误、select字段配置异常),会导致查询无结果。

排查方案:
先用最简分页参数测试:

const options = { page: 1, limit: 10 };
OfflineMacroAction.paginate({}, options, (err, result) => {
    console.log(result);
});

3. 模型与集合映射错误

你创建模型时指定了第三个参数为'offlineMacroActions',需确认MongoDB中实际集合名与该参数完全一致(MongoDB集合名区分大小写)。

排查方案:
在MongoDB Shell中执行:

db.offlineMacroActions.find()

如果能查到数据,说明集合名正确;否则检查集合名是否存在拼写或大小写错误。

4. 基础查询验证

先跳过分页插件,用普通find查询验证模型是否能获取数据:

OfflineMacroAction.find({}, (err, docs) => {
    console.log('基础查询结果:', docs);
});
  • 如果find也返回空,问题出在模型与集合的映射/字段匹配,回到原因1、3排查
  • 如果find能查到数据,再检查分页插件的注册是否正确(确认offlineMacroActionSchema.plugin(paginate);在模型导出前执行)

5. 软删除数据过滤

如果集合中数据的deleted_at(或deletedAt)字段不为null,而你的查询条件未排除这些数据,会导致返回空。

解决方案:
在分页查询条件中添加软删除过滤:

OfflineMacroAction.paginate({ deleted_at: null }, options, (err, result) => {
    console.log(result);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:12:40