sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB parece elegir el índice incorrecto al agregar

Es posible que desee leer los documentos sobre $sort rendimiento :

Además, tenga en cuenta que se llama 'tubería de agregación ' por una razón. Simplemente no importa dónde ordene después de hacer coincidir. Así que la solución debería ser bastante simple:

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 } }
])

La verificación de si el campo del archivo existe puede ser innecesaria cuando se garantiza que el campo existe en todos los registros. Esto no duele, ya que hay un índice en el campo. Lo mismo ocurre con la ordenación adicional:dado que nos aseguramos de que solo los documentos que contienen un campo de archivo ingresen a la canalización, se debe usar el índice.