sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB ser ud til at vælge det forkerte indeks, når man foretager aggregering

Du vil måske læse dokumenterne vedr. $sort ydeevne :

Husk også, at det kaldes 'aggregation pipeline ' Af en grund. Det er simpelthen lige meget, hvor du sorterer efter matchning. Så løsningen burde være ret 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 } }
])

Det kan være unødvendigt at kontrollere, om filfeltet eksisterer, når det er garanteret, at feltet findes i hver post. Dette skader ikke, da der er indeks på banen. Det samme gælder med den ekstra sortering:da vi sørgede for, at kun dokumenter, der indeholder et filfelt, kommer ind i pipelinen, bør indekset bruges.



  1. MongoDB:Ufølsom mellem store og små bogstaver og accentufølsom

  2. Hvordan fjernforbindelse til min MongoDB på min server med java?

  3. Selektiv replikation i mongodb

  4. Mongoose finder dokumenter, hvis array indeholder en værdi