sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB verkar välja fel index när man gör aggregering

Du kanske vill läsa dokumenten angående $sort prestanda :

Tänk också på att det kallas "aggregations pipeline ' av en anledning. Det spelar helt enkelt ingen roll var du sorterar efter matchning. Så lösningen borde vara ganska enkel:

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

Kontrollen om filfältet finns kan vara onödigt när det är garanterat att fältet finns i varje post. Detta skadar inte, eftersom det finns ett index på fältet. Samma sak gäller för den extra sorteringen:eftersom vi såg till att endast dokument som innehåller ett filfält kommer in i pipelinen, bör indexet användas.



  1. MongoDB med Mongoose limit underdokument

  2. Flera serverinstansförsök medan du kör ett skämt

  3. Python-redis:hämta binär data efter att en klient konfigurerats med decode_responses=True

  4. Ta bort ett underdokument kapslat i en array i MongoDB