Potresti voler leggere i documenti relativi $sort
prestazioni
:
Inoltre, tieni presente che si chiama 'aggregazione pipeline ' per una ragione. Semplicemente non importa dove ordini dopo la corrispondenza. Quindi la soluzione dovrebbe essere piuttosto semplice:
db.access_log.aggregate([
{
"$match": {
"visit_dt": {
"$gte": ISODate('2015-03-09'),
"$lt": ISODate('2015-03-11')
},
"file": {"$exists": true }
}
},
{ "$sort": { "file": 1 } },
{ "$project": { "file": 1, "_id": 0 } },
{ "$group": { "_id": "$file", "count": { "$sum": 1 } } },
{ "$sort": { "count": -1 } }
])
Il controllo dell'esistenza del campo file potrebbe non essere necessario quando è garantito che il campo esista in ogni record. Questo non guasta, in quanto c'è un indice sul campo. Lo stesso vale per l'ordinamento aggiuntivo:poiché ci siamo assicurati che solo i documenti contenenti un campo file entrino nella pipeline, dovrebbe essere utilizzato l'indice.