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

Сортиране по множество полета mongo DB

Оптимизаторът на заявки MongoDB работи, като изпробва различни планове, за да определи кой подход работи най-добре за дадена заявка. Печелившият план за този модел на заявка след това се кешира за следващите ~1000 заявки или докато не направите explain() .

За да разберете кои планове за заявки са били взети предвид, трябва да използвате explain(1) , напр.:

db.col.find({category:'A'}).sort({updated: -1}).explain(1)

allPlans подробности ще покажат всички сравнени планове.

Ако изпълните заявка, която не е много селективна (например, ако много записи отговарят на вашите критерии за {category: { $ne:'A'}} ), може да е по-бързо за MongoDB да намери резултати с помощта на BasicCursor (сканиране на таблица), вместо да съвпада с индекс.

Редът на полетата в заявката обикновено не прави разлика за избора на индекс (има няколко изключения със заявките за диапазон). Редът на полетата в сортиране оказва влияние върху избора на индекс. Ако вашият sort() критериите не съответстват на реда на индекса, данните за резултата трябва да бъдат повторно сортирани, след като индексът се използва (трябва да видите scanAndOrder:true в изхода за обяснение, ако това се случи).

Също така си струва да се отбележи, че MongoDB ще използва само един индекс на заявка (с изключение на $or s).

Така че, ако се опитвате да оптимизирате заявката:

db.col.find({category:'A'}).sort({updated: -1, rating: -1})

Ще искате да включите и трите полета в индекса:

db.col.ensureIndex({category: 1, updated: -1, rating: -1})

FYI, ако искате да принудите определена заявка да използва индекс (обикновено не е необходим или препоръчан), има hint() опция, която можете да опитате.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да сумирате стойността на ключ във всички документи в колекция MongoDB

  2. Често срещани въпроси за интервю за MongoDB

  3. Как да задам стойност по подразбиране на цяло число в mongodb?

  4. Мога ли да заявя MongoDB ObjectId по дата?

  5. Как да върна резултатите от Mongoose от метода за намиране?