Понастоящем има някои ограничения в това, което рамката за обобщаване може да направи, за да подобри ефективността на вашата заявка, но можете да й помогнете по следния начин:
db.my_collection.aggregate([
{ "$sort" : { "LOG_TYPE" : 1 } },
{ "$group" :{
"_id": "$LOG_TYPE",
"COUNT": { "$sum":1 }
}}
])
Чрез добавяне на сортиране на LOG_TYPE вие ще "принудите" оптимизатора да използва индекс на LOG_TYPE, за да подреди документите. Това ще подобри производителността по няколко начина, но различно в зависимост от използваната версия.
При реални данни, ако имате сортирани данните, идващи в етап $group, това ще подобри ефективността на натрупване на общите суми. Можете да видите различните планове за заявки, където с $sort ще използва индекса на shard key. Подобрението, което това дава в действителната производителност, ще зависи от броя на стойностите във всяка "кофа" - като цяло LOG_TYPE има само седем отделни стойности, което го прави изключително лош shard ключ, но това означава, че е много вероятно следният код да бъде много по-бързо дори от оптимизираното агрегиране:
db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
print(db.my_collection.count({"LOG_TYPE":lt});
});