极其缓慢的 Mongo $group 阶段

Jas*_*ali 5 mongodb database-performance query-performance aggregation-framework

我有以下 mongo 聚合管道,我试图在包含 600 万个文档的集合上执行(每个文档平均有 30 个键值对)。我担心的是小组赛需要很长时间(大约几分钟)。这些阶段的顺序是:匹配 -> 排序 -> 项目 -> 组 -> 跳过 -> 限制。作为匹配和排序的一部分的所有查询键都已正确编入索引。我还尝试在没有组阶段的情况下运行相同的管道,它在不到一秒钟的时间内完成。我也对这个聚合管道做了解释,我的索引被正确使用。

无论如何,我可以进一步提高我下面的管道的小组赛表现吗?或者有没有其他替代方法可以用来执行不同的查询,以及对我的集合中的键进行分页(跳过/限制)?我查看了 db.collection.distinct,但它的 bson 大小上限为 16 MB。

[ 
{ "$match":{ "dSource":{ "$in":[ "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33" ] }, "$and":[ { "dirty":{ "$exists":false } } ] } }, 
{ "$sort":{ "_id":1 } }, 
{ "$project":{ "sampleKey":1 } }, 
{ "$group":{ "_id":"$sampleKey" } },
{ "$skip":0 },
{ "$limit":200 } 
]
Run Code Online (Sandbox Code Playgroud)