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

基于MongoDB、Mongoose实现cursor pagination如何获取第二组数据

游标分页实现说明

不需要单独创建路由,你可以把两部分逻辑合并到同一个接口中,通过判断请求是否携带next游标参数执行对应逻辑即可,具体实现逻辑如下:

  • 定义统一的列表请求接口,例如Express框架下可以定义为GET /api/items
  • 接口逻辑中优先判断是否存在req.query.next参数:
    • 未携带该参数时判定为请求第一页数据,执行你已经理解的第一部分查询逻辑
    • 携带该参数时执行第二部分查询逻辑,过滤出_id小于游标值的文档
  • 返回数据前增加边界判断:如果返回的items长度小于设置的分页条数,说明已经没有更多数据,将next设为null返回给前端,避免后续无效请求

完整代码示例

// 以Express + Mongoose为例,可适配你所用的后端框架
app.get('/api/items', async (req, res) => {
  const pageSize = 2; // 单页数据条数
  const query = {};
  // 存在游标参数时追加查询条件
  if (req.query.next) {
    query._id = { $lt: req.query.next };
  }
  // 统一执行查询
  const items = await db.items.find(query).sort({ _id: -1 }).limit(pageSize);
  // 处理下一页游标
  const next = items.length === pageSize ? items[items.length - 1]._id : null;
  res.json({ items, next });
})

注意:如果你后续调整了排序字段(比如改用创建时间createdAt排序),需要保证排序字段是唯一且有序的,同时游标值需要对应调整为排序字段的值,避免出现分页漏数据、重复数据的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:54:00