MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB wydaje się wybierać zły indeks podczas agregacji

Możesz przeczytać dokumentację dotyczącą $sort wydajność :

Pamiętaj też, że nazywa się to „agregacją potoku ' z powodu. Po prostu nie ma znaczenia, gdzie sortujesz po dopasowaniu. Więc rozwiązanie powinno być całkiem proste:

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

Sprawdzenie, czy pole pliku istnieje, może być niepotrzebne, jeśli gwarantuje się, że pole istnieje w każdym rekordzie. To nie boli, bo na boisku jest indeks. To samo dotyczy dodatkowego sortowania:ponieważ upewniliśmy się, że tylko dokumenty zawierające pole pliku wchodzą do potoku, należy użyć indeksu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pliki utworzone przez MongoDB

  2. Agregacja Mongodb według dnia na podstawie uniksowego znacznika czasu

  3. MongoDB-as-a-Service w Kanadzie

  4. Serializacja sterownika MongoDB C# z obiektami dynamicznymi

  5. MongoDBObject nie jest dodawany do wnętrza pętli rrd foreach casbah scala apache spark