Misschien wil je de documenten over $sort
prestatie
:
Houd er ook rekening mee dat het 'aggregatie pijplijn . wordt genoemd ' voor een reden. Het maakt gewoon niet uit waar je sorteert na het matchen. Dus de oplossing zou vrij eenvoudig moeten zijn:
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 } }
])
De controle of het bestandsveld bestaat kan overbodig zijn als gegarandeerd is dat het veld in elk record voorkomt. Dit kan geen kwaad, want er staat een index op het veld. Hetzelfde geldt voor de extra sortering:aangezien we ervoor hebben gezorgd dat alleen documenten met een bestandsveld in de pijplijn komen, moet de index worden gebruikt.