Node.js中Mongoose聚合查询$skip无法正常工作的问题
问题原因与解决方法
核心问题:聚合管道阶段顺序错误
你遇到的不是$skip功能异常,是管道阶段执行顺序搞反了。MongoDB聚合管道是按数组里的顺序依次执行的,前一个阶段的输出会作为后一个阶段的输入:
- 你原来先执行
$limit:1,会把2条文档先截断成1条,之后再执行$skip:1,自然就没有数据可返回了。
正确写法:调换$skip和$limit的顺序
把$skip放在$limit前面,先跳过指定数量的文档,再对剩余结果做数量限制:
// 要跳过1条、返回1条的正确写法 const data = await MyData.aggregate([ { $skip: 1 }, { $limit: 1 }, ])
验证各场景
- 当
$skip:0、$limit:1:先保留所有2条文档,再限制返回1条,结果正常。 - 当
$skip:1、$limit:1:先跳过第1条,剩下1条文档,再限制返回1条,会得到你预期的第2条数据。 - 当
$skip:0、$limit:2:先保留所有2条,再限制返回2条,和之前结果一致。
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

