我正在尝试对包含600万个文档的集合执行以下mongo聚合管道(每个文档平均有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 }
]