我有一个简单的聚合,如下所示:
Items.aggregate([
{
$limit: 1000
},
{
$skip: 10000
}
])
返回没有结果。但是,如果我执行简单的Items.find({}).limit(1000).skip(10000)
,则返回结果。
我在这里缺少什么想法?
答案 0 :(得分:1)
在find
操作中,skip
和limit
充当游标属性。
limit
将基本上修剪结果或光标中的任何内容,skip
将向前移动该数量。
因此,它们在两者的应用顺序上没有区别。如果limit
首先出现或skip
首先出现,则创建的最终光标对象是相同的。
如果您打算使用,skip
位于limit
Items.find({}).skip(10000).limit(1000)
但是,在聚合的情况下,遵循严格的管道,其中第一个结果进入第二个,依此类推。因此,您案例中的第一个$limit
将选择前1000个文档。那么下一个$skip
只会跳过所有这1000个文档,从而返回一个空的结果集。再次在$skip
$limit
Items.aggregate([
{
$skip: 10000
},
{
$limit: 1000
}
])