Der er i øjeblikket nogle begrænsninger i, hvad aggregeringsrammeværk kan gøre for at forbedre ydeevnen af din forespørgsel, men du kan hjælpe den på følgende måde:
db.my_collection.aggregate([
{ "$sort" : { "LOG_TYPE" : 1 } },
{ "$group" :{
"_id": "$LOG_TYPE",
"COUNT": { "$sum":1 }
}}
])
Ved at tilføje en sortering på LOG_TYPE vil du "tvinge" optimeringsværktøjet til at bruge et indeks på LOG_TYPE for at få dokumenterne i orden. Dette vil forbedre ydeevnen på flere måder, men forskelligt afhængigt af den anvendte version.
På rigtige data, hvis du har de data, der kommer ind i $gruppestadiet sorteret, vil det forbedre effektiviteten af akkumulering af totalerne. Du kan se de forskellige forespørgselsplaner, hvor den med $sort vil bruge shard nøgleindekset. Den forbedring, dette giver i den faktiske ydeevne, vil afhænge af antallet af værdier i hver "spand" - generelt gør LOG_TYPE, der kun har syv forskellige værdier, det til en ekstremt dårlig shard-nøgle, men det betyder, at den følgende kode med stor sandsynlighed vil være en meget hurtigere end selv optimeret aggregering:
db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
print(db.my_collection.count({"LOG_TYPE":lt});
});