聚合管道中$sort在$set后排序原字段,ESR规则是否生效?
ESR规则是否适用?
答案是适用,原因如下:
- ESR规则的核心是索引顺序遵循「等值匹配字段 → 排序字段 → 范围匹配字段」,你手上的
country, A复合索引,正好对应聚合管道里$match阶段的等值匹配字段country,以及$sort阶段的排序字段A,完全贴合ESR的结构要求。 - 中间的
$set阶段只是给文档新增字段B,既没修改country和A这两个索引相关字段,也没过滤或改变文档的数量、顺序逻辑。MongoDB的聚合优化器会自动调整阶段执行顺序,把$sort提前到$set之前执行——实际执行流程会是先完成$match过滤,接着用索引完成$sort,再执行$set添加字段,最后$limit取结果。这种情况下,索引的排序能力完全能被利用,ESR规则自然生效。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

