使用sort、skip、limit实现分页时返回空数据的问题求助
解决MongoDB排序+分页返回空结果的问题
你的代码存在三个核心问题,导致返回空结果:
1. Cursor方法未正确链式调用
MongoDB的limit/skip/sort等cursor方法不会修改原cursor对象,而是返回一个携带新条件的新cursor。你分开调用这些方法但未重新赋值,原cursor根本没应用分页和排序规则。
2. 未将Cursor转换为数据数组
直接返回cursor对象无法被正确序列化返回给客户端,必须调用toArray()方法获取实际的查询数据。
3. Skip值超过数据总量
你的示例数据只有10条,skip(10)会跳过所有数据,自然返回空。如果是测试分页逻辑,应将skip值设为0或小于数据总量的数值。
修正后的代码
let query = { playerId : playerId, }; // 链式调用cursor方法,并转换为数组 let data = await collection.find(query) .sort({"lastAccessed" : -1}) // 先排序,再分页(顺序影响性能) .skip(0) // 实际分页时改为:(当前页码-1)*每页条数 .limit(10) .toArray(); context.res = { body: data }
额外提示
- 分页操作顺序:先sort,再skip,最后limit,这是MongoDB的最优执行顺序,能减少不必要的数据加载。
- 若需实现多页分页,确保数据总量大于
skip值,否则会返回空结果。
内容的提问来源于stack exchange,提问作者temp
相关产品推荐
相关产品推荐

