Al momento ci sono alcune limitazioni in ciò che il framework di aggregazione può fare per migliorare le prestazioni della tua query, ma puoi aiutarlo nel modo seguente:
db.my_collection.aggregate([
{ "$sort" : { "LOG_TYPE" : 1 } },
{ "$group" :{
"_id": "$LOG_TYPE",
"COUNT": { "$sum":1 }
}}
])
Aggiungendo un ordinamento su LOG_TYPE si "forza" l'ottimizzatore a utilizzare un indice su LOG_TYPE per mettere in ordine i documenti. Ciò migliorerà le prestazioni in diversi modi, ma in modo diverso a seconda della versione utilizzata.
Su dati reali, se i dati che entrano nella fase a gironi di $ sono ordinati, migliorerà l'efficienza dell'accumulo dei totali. Puoi vedere i diversi piani di query in cui con $sort utilizzerà l'indice della chiave shard. Il miglioramento che questo fornisce nelle prestazioni effettive dipenderà dal numero di valori in ciascun "bucket" - in generale LOG_TYPE avendo solo sette valori distinti lo rende una chiave shard estremamente scarsa, ma significa che è molto probabile che il codice seguente sarà un molto più veloce anche dell'aggregazione ottimizzata:
db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
print(db.my_collection.count({"LOG_TYPE":lt});
});