MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB parece escolher o índice errado ao fazer agregação


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.