我试图使用聚合框架与$match
和$group
阶段。 $group
阶段使用索引数据吗?我正在使用最新的可用mongodb版本 - 2.5.4
回答
$group
不使用索引数据。
从MongoDB的docs:
,当他们出现在管道开头的$匹配和$ SORT管道运营商可以利用索引的优势。
$ geoNear管道运算符利用地理空间索引。 使用$ geoNear时,$ geoNear管线操作必须在聚合管道中显示为 第一个阶段。
您的第一句与您答案的其余部分矛盾:只要$ group是管道的第二个阶段,第一个是与$组相同的字段$ sort,索引*将被使用。 –
@ArthurTacca:$ sort阶段将使用索引,但$ group阶段不会。 – 4J41
我认为你有点迂腐:如果$ sort阶段使用索引,并且$ group阶段使用排序的结果来避免昂贵的扫描,那么我会说$ group已经使用索引。您的文档引用不会说$ group是否利用了前面的$类型,所以我认为您没有真正回答原始问题的意图。 (之前在你的3.2文档回答中的引用强烈表明答案是“是”,因此我的原始评论;来自3.4文档的新引用不太明显,但仍不明确。) –
版本3.2中有所变化:从MongoDB 3.2开始,索引可以覆盖聚合管道。在MongoDB 2.6和3.0中,索引无法覆盖聚合管道,因为即使管道使用索引,聚合仍然需要访问实际文档。
https://docs.mongodb.com/master/core/aggregation-pipeline/#pipeline-operators-and-indexes
由于4J41的回答说,$group
不(直接)使用一个索引,虽然$sort
做,如果它是在管道的第一阶段。但是,$group
原则上可能会有一个优化实现,如果它紧跟在$sort
后面,在这种情况下,您可以通过事先放置$sort
来有效利用索引。
关于$group
是否有这种优化(尽管我敢打赌如果确实如此,那么这表明它不会),似乎并没有直接的答案。答案是MongoDB bug 4507:目前$group
没有这个实现,所以4J41答案的第一行就是最后一个。如果您确实需要效率,则根据应用程序的不同,使用常规查询并在您的客户端代码中进行分组可能最快。
- 1. mongodb聚合框架的索引优化
- 2. MongoDB和聚合框架
- 3. 聚合框架MongoDB的
- 4. 何时使用mongodb的聚合框架?
- 5. 使用MongoDB的聚合框架
- 6. MongoDB中的聚合框架
- 7. MongoDb增加聚合框架性能
- 8. MongoDB聚合框架$ group可以返回一个值数组吗?
- 9. 用MongoDB的聚合框架绝对值
- 10. Spring数据mongodb - 聚合框架集成
- 11. Mongodb聚合,在$ group _id
- 12. MongoDB的聚合框架错误
- 13. MongoDB聚合框架:组查询
- 14. Mongodb聚合框架中是否有底层函数?
- 15. MongoDB的聚合框架和Python
- 16. 在聚合框架中使用索引 - 了解文档
- 17. grails的Mongodb聚合框架1.3.7
- 18. Cassandra的Mongodb聚合框架替代
- 19. 在MongoDB聚合框架中的项目
- 20. MongoDB聚合框架现在的日期
- 21. MongoDB中的聚合框架结合小组和项目
- 22. MongoDB的聚合和GROUP BY查询
- 23. Group通过在MongoDb上的聚合
- 24. 为MySQL InnoDB聚集索引使用组合主键是否好?
- 25. MongoDB:如何使用聚合框架返回objectIDs?
- 26. 通过C#使用MongoDB聚合框架时的性能问题
- 27. MongoDb聚合框架 - 可以在$ push中使用$ sum结果吗?
- 28. 在MongoDB中使用聚合框架分组并计数
- 29. 如何使用MongoDB中的聚合框架执行此查询?
- 30. 在Mongodb中使用聚合框架的简单分组示例
[Mongodb indexing for aggregates]的可能重复(http://stackoverflow.com/questions/20170636/mongodb-indexing-for-aggregates) – WiredPrairie