Mongodb聚合不返回存在的结果

时间:2017-01-03 21:22:28

标签: mongodb

我有一个简单的聚合,如下所示:

Items.aggregate([
              {
                $limit: 1000
              },
              {
                $skip: 10000
              }
             ])

返回没有结果。但是,如果我执行简单的Items.find({}).limit(1000).skip(10000),则返回结果。

我在这里缺少什么想法?

1 个答案:

答案 0 :(得分:1)

find操作中,skiplimit充当游标属性。

limit将基本上修剪结果或光标中的任何内容,skip将向前移动该数量。

因此,它们在两者的应用顺序上没有区别。如果limit首先出现或skip首先出现,则创建的最终光标对象是相同的。

如果您打算使用,skip位于limit

之前
Items.find({}).skip(10000).limit(1000)

但是,在聚合的情况下,遵循严格的管道,其中第一个结果进入第二个,依此类推。因此,您案例中的第一个$limit将选择前1000个文档。那么下一个$skip 只会跳过所有这1000个文档,从而返回一个空的结果集。再次在$skip

之前使用$limit
Items.aggregate([ 
              {
                $skip: 10000
              },
              {
                $limit: 1000
              }
             ])