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

MongoDB如何每次仅获取10条文档实现点击分页查询?

MongoDB实现点击分页加载(每次10条)方案

你当前的全量查询代码如下:

const result = student.find();

要实现点击按钮每次加载10条、下次加载后续10条的效果,优先推荐基于有序字段的游标分页,性能稳定,不会随着数据量增大变慢,也不会因为数据增删出现漏查、重复查的问题,具体实现步骤:

  • 选一个有序、唯一的字段作为分页标记,直接用MongoDB自带的_id字段就可以,它自带唯一索引、和插入顺序绑定,不需要额外建索引。
  • 前端维护两个状态:一个是固定每页条数pageSize = 10,另一个是lastId,用来存上一次查询返回的最后一条数据的_id,初始值为null。
  • 每次点击加载按钮时,前端把当前存的lastId传给后端,后端根据这个值查询下一批数据,返回给前端后,前端把lastId更新为本次返回结果最后一条的_id;如果某次返回的结果条数小于10,说明已经到最后一页,直接隐藏加载按钮即可。

具体代码实现

第一次加载(无lastId场景)

const pageSize = 10;
// 按_id倒序取最新的10条,要按插入正序排列就把sort里的-1改成1
const firstPageData = await student.find()
  .sort({ _id: -1 })
  .limit(pageSize);
// 返回给前端,前端记录最后一条的_id作为下次请求的lastId

后续加载更多(传lastId场景)

const pageSize = 10;
// 从前端请求参数中拿到上一次返回的最后一条数据的_id,根据自己的接口传参规则,也可以从query、body中取值
const { lastId } = req.params;
const nextPageData = await student.find({
  // 倒序场景下,找_id比lastId小的下一批数据;如果是正序排列就把$lt改成$gt
  _id: { $lt: lastId }
})
  .sort({ _id: -1 })
  .limit(pageSize);
// 返回给前端,前端更新lastId为本次结果最后一条的_id

其他可选方案(仅适合小数据量场景)

如果你的student集合数据量在千条以内,也可以用skip + limit的简单写法,前端维护一个页码变量page,初始值为0,每次点击加载后page自增1即可:

const pageSize = 10;
const page = 0; // 每次点击加载后值+1
const pageData = await student.find()
  .sort({ _id: -1 })
  .skip(page * pageSize)
  .limit(pageSize);

注意:这个方案不适合大数据量场景,skip方法会遍历所有被跳过的文档,页数越大查询速度越慢,还可能因为查询间隔内数据增删,出现重复加载或者漏加载数据的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:06:16