Du vil måske læse dokumenterne vedr. $sort
ydeevne
:
Husk også, at det kaldes 'aggregation pipeline ' Af en grund. Det er simpelthen lige meget, hvor du sorterer efter matchning. Så løsningen burde være ret enkel:
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 } }
])
Det kan være unødvendigt at kontrollere, om filfeltet eksisterer, når det er garanteret, at feltet findes i hver post. Dette skader ikke, da der er indeks på banen. Det samme gælder med den ekstra sortering:da vi sørgede for, at kun dokumenter, der indeholder et filfelt, kommer ind i pipelinen, bør indekset bruges.