sql >> Database >  >> NoSQL >> MongoDB

MongoDB lijkt de verkeerde index te kiezen bij het aggregeren

Misschien wil je de documenten over $sort prestatie :

Houd er ook rekening mee dat het 'aggregatie pijplijn . wordt genoemd ' voor een reden. Het maakt gewoon niet uit waar je sorteert na het matchen. Dus de oplossing zou vrij eenvoudig moeten zijn:

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

De controle of het bestandsveld bestaat kan overbodig zijn als gegarandeerd is dat het veld in elk record voorkomt. Dit kan geen kwaad, want er staat een index op het veld. Hetzelfde geldt voor de extra sortering:aangezien we ervoor hebben gezorgd dat alleen documenten met een bestandsveld in de pijplijn komen, moet de index worden gebruikt.



  1. Hoe een reeks objecten in Redis op te slaan?

  2. Hoe voer je db.killOp() uit met het MongoDB native Node.js-stuurprogramma?

  3. Hoe verander ik MongoDB-query in een JSON?

  4. Is er een manier om mongodb te dwingen een bepaalde index in ram op te slaan?