带$sort与$limit的MongoDB聚合查询是否需内存排序?
问题解答
这个查询需要执行内存排序,原因如下:
- MongoDB聚合中的
$sort要利用索引,前提是排序字段的索引能直接作用于排序阶段的输入数据。 - 当前查询里,
$match阶段使用的age和city字段不在已创建的last_logged_in: -1索引中,所以$match需要先扫描全集合(或非目标索引)筛选出符合条件的文档,这些文档会被加载到内存中。 - 后续的
$sort阶段只能基于内存中的筛选结果进行排序,无法直接复用last_logged_in索引的有序性——因为索引里的文档并没有经过$match的过滤,没法直接取出符合age>18且city在指定列表的有序文档。 - 虽然最后有
$limit,但它是在$sort之后执行的,不影响排序阶段是否需要内存排序的判断。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

