MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB изглежда избира грешен индекс, когато прави агрегат

Може да искате да прочетете документите относно $sort изпълнение :

Освен това имайте предвид, че се нарича „тръбопровод за агрегиране ' с причина. Просто няма значение къде сортирате след съпоставяне. Така че решението трябва да е доста просто:

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

Проверката дали полето на файла съществува може да е ненужна, когато е гарантирано, че полето съществува във всеки запис. Това не боли, тъй като на полето има индекс. Същото важи и за допълнителното сортиране:тъй като се уверихме, че само документи, съдържащи поле за файл, влизат в конвейера, трябва да се използва индексът.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Запитване за дати с данни на Mongo Spring срещу конзолата на Mongo (дати)

  2. Функция MapReduce в MongoDB - Групиране на документ по ID

  3. съхраняване на пълен текст от txt файл в mongodb

  4. Импортиране на данни в екземпляр на MongoDB

  5. Стартирайте Mahout RowSimilarity препоръчител на MongoDB данни