Você pode querer ler os documentos sobre
$sort
desempenho
:Além disso, lembre-se de que é chamado de 'agregação pipeline ' por uma razão. Simplesmente não importa onde você classifica após a correspondência. Então a solução deve ser bem simples:
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 } }
])
A verificação da existência do campo de arquivo pode ser desnecessária quando é garantido que o campo existe em todos os registros. Isso não faz mal, pois há um índice no campo. O mesmo acontece com a classificação adicional:como nos certificamos de que apenas documentos contendo um campo de arquivo entrem no pipeline, o índice deve ser usado.