sql >> Databáze >  >> NoSQL >> MongoDB

Zdá se, že MongoDB si při agregaci vybírá špatný index

Možná si budete chtít přečíst dokumenty týkající se $sort výkon :

Také mějte na paměti, že se nazývá 'agregační potrubí ' z důvodu. Je prostě jedno, kam po seřazení seřadíte. Řešení by tedy mělo být docela jednoduché:

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

Kontrola, zda pole souboru existuje, může být zbytečná, pokud je zaručeno, že pole existuje v každém záznamu. To není na škodu, protože na poli je index. Totéž platí s dalším řazením:protože jsme zajistili, že do kanálu vstupují pouze dokumenty obsahující pole souboru, měl by být použit index.



  1. MongoDB:Jak se dotazovat přes řetězec json?

  2. Jarní vlastní dotaz se stránkovatelným

  3. MongoDB Nelze kanonizovat dotaz:BadValue Příliš mnoho textových výrazů

  4. Jak zrušit úlohu ve frontě v Laravel nebo Redis