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

MongoDB/Mongoose分页skip返回空数组?技术问题咨询

分页查询返回空数组的问题排查与修复

嘿,你猜得太准了!问题确实出在skip参数的计算逻辑上。

咱们来掰扯清楚你遇到的情况:你总共有5条记录,当传入limit=100时,默认page=1,按照你现在的代码计算skip(limit * page),也就是skip(100 * 1) = skip(100)——这相当于直接跳过了前100条数据,但你总共才5条,自然就返回空数组了。

问题根源

你参考的分页逻辑里,skip的正确计算应该是跳过当前页之前的所有数据,公式应该是limit * (page - 1),而不是limit * page。原因很简单:

  • 第1页(page=1):不需要跳过任何数据,skip(0),直接取前limit条
  • 第2页(page=2):跳过第1页的limit条数据,skip(limit * 1),以此类推

修复后的代码

把skip的计算改成limit * (page - 1)就可以完美解决问题了:

const limit = +req.query.limit || 20 // 默认每页20条
const page = +req.query.page || 1
const events = await EventModels.find({})
  .sort('-created')
  .skip(limit * (page - 1)) // *这里是关键修正*
  .limit(limit)
  .exec()

这样当你传入limit=100、page=1时,skip(100 * 0) = skip(0),就能正确获取到全部5条记录了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:52:07