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
相关产品推荐
相关产品推荐

