为了提高效率,Mongo文档建议限制语句紧跟在排序语句之后,最终会有点荒谬:
collection.find(f).sort(s).limit(l).skip(p)
Run Code Online (Sandbox Code Playgroud)
我说这有点荒谬,因为它似乎说先拿l项,然后放下那些l的第一个p.由于p通常大于l,你认为你最终没有结果,但实际上你最终会得到l结果.
聚合效果更符合您的预期:
collection.aggregate({$unwind: u}, {$group: g},{$match: f}, {$sort: s}, {$limit: l}, {$skip: p})
Run Code Online (Sandbox Code Playgroud)
如果p> = l,则返回0结果.
collection.aggregate({$unwind: u}, {$group: g}, {$match: f}, {$sort: s}, {$skip: p}, {$limit: l})
Run Code Online (Sandbox Code Playgroud)
但是文档似乎暗示如果匹配返回的结果集大于工作内存,则会失败.这是真的?如果是这样,是否有更好的方法对通过聚合返回的结果集执行分页?
资料来源:本页末尾的"版本2.4更改"评论:http: //docs.mongodb.org/manual/reference/operator/aggregation/sort/
yǝs*_*ǝla 10
MongoDB中光标的方法(即,使用时find())等limit,sort,skip可以以任何顺序被施加=>顺序无关紧要.A find()返回应用了修改的游标.排序总是在限制之前完成,跳过也在限制之前完成.换句话说,顺序是:sort - > skip - > limit.
聚合框架不返回数据库游标.相反,它返回一个包含聚合结果的文档.它的工作原理是在管道的每个步骤产生中间结果,因此操作顺序非常重要.
我猜MongoDB不支持游标修饰符方法的顺序,因为它在内部实现的方式.
您不能对聚合框架的结果进行分页,因为只有一个文档只包含结果.您仍然可以使用跳过和限制对常规查询进行分页,但更好的做法是使用范围查询,因为它使用索引的效率.
更新:
从v2.6开始,Mongo聚合框架返回一个游标而不是一个文档.比较:v2.4和v2.6.
| 归档时间: |
|
| 查看次数: |
10813 次 |
| 最近记录: |