Definition 定义
限制传递到 pipeline 中下一 stage 的文档数量。
$limit
stage 的原型形式如下:
{ $limit: <positive 64-bit integer> }
$limit
需要一个正整数(即大于0),指定要传递的最大文档数。
NOTE 从 MongoDB 5.0 开始,
$limit
pipeline aggregation 有一个 64 位的整数限制。传递给管道的值如果超过这个限制,将返回一个无效的参数(invalid argument)错误。
Behavior 行为
Using $limit with Sorted Results 对排序结果使用 $limit
如果将$limit
stage 与以下任何一项一起使用:
- $sort aggregation stage,
- sort() 方法,
- findAndModify 命令或 findAndModify() shell 方法的
sort
字段,
请确保在你的排序中至少包含一个包含唯一值的字段,然后再将结果传递给$limit
stage。
对包含重复值的字段进行排序可能会在多次执行中为这些重复的字段返回不一致的排序顺序,特别是当集合正在积极接收写入时。
保证(guarantee)排序一致性(consistency)的最简单方法是在你的排序查询中包含_id
字段。
请看下面的内容,了解更多的信息:
- Consistent sorting with $sort (aggregation) 使用 $sort(聚合)进行一致排序
- Consistent sorting with the sort() shell method 使用 sort() shell 方法进行一致排序
- Consistent sorting with the findAndModify command 使用 findAndModify 命令进行一致排序
- Consistent sorting with the findAndModify() shell method 使用 findAndModify() shell 方法进行一致排序
Example 例子
考虑以下示例:
该 operation 只返回 pipeline 传递给它的前 5 个文档。db.article.aggregate( [
{ $limit: 5 }
] )
$limit
对其所传递的文档内容没有影响。NOTE 当 $sort 在
$limit
之前,并且没有修改文档数量的中间 stage,优化器(optimizer)可以将$limit
凝聚到 $sort 中。这允许 $sort operation 在进行过程中只保持前n
个结果,其中n
是指定的限制,并确保 MongoDB 只需要在内存中存储n
个项目(items)。当allowDiskUse
为true
且n
个项目超过 aggregation memory limit(聚合内存限制)时,这种优化仍然适用。
TIP 参阅:
- Aggregation with the Zip Code Data Set 用邮政编码数据集进行聚合
- Aggregation with User Preference Data 用用户偏好数据进行聚合
参考
https://docs.mongodb.com/manual/reference/operator/aggregation/limit