Możesz przeczytać dokumentację dotyczącą $sort
wydajność
:
Pamiętaj też, że nazywa się to „agregacją potoku ' z powodu. Po prostu nie ma znaczenia, gdzie sortujesz po dopasowaniu. Więc rozwiązanie powinno być całkiem proste:
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 } }
])
Sprawdzenie, czy pole pliku istnieje, może być niepotrzebne, jeśli gwarantuje się, że pole istnieje w każdym rekordzie. To nie boli, bo na boisku jest indeks. To samo dotyczy dodatkowego sortowania:ponieważ upewniliśmy się, że tylko dokumenty zawierające pole pliku wchodzą do potoku, należy użyć indeksu.