Може да искате да прочетете документите относно $sort
изпълнение
:
Освен това имайте предвид, че се нарича „тръбопровод за агрегиране ' с причина. Просто няма значение къде сортирате след съпоставяне. Така че решението трябва да е доста просто:
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 } }
])
Проверката дали полето на файла съществува може да е ненужна, когато е гарантирано, че полето съществува във всеки запис. Това не боли, тъй като на полето има индекс. Същото важи и за допълнителното сортиране:тъй като се уверихме, че само документи, съдържащи поле за файл, влизат в конвейера, трябва да се използва индексът.