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

създаване на покрит индекс за рамка за агрегиране

За да извлечете максимума от индекса, трябва да имате $match достатъчно рано в конвейера, който използва всички полета в индекса. И избягвайте да използвате $and оператор, тъй като е ненужен и в текущата (2.4) версия може да доведе до непълно използване на индекс (за щастие коригирано за предстоящата 2.6).

Заявката обаче не е съвсем правилна, тъй като трябва да използвате $elemMatch за да се уверите, че същият елемент се използва за удовлетворяване на полетата за име и стойност.

Вашата заявка трябва да бъде:

db.Phone.aggregate([
{$match: {  type: "Samsung", 
           attributes: { $all: [
                {$elemMatch: {"value":"100", "type" : "BatteryLife" }},
                {$elemMatch: {"value":"200$", "type" : "Price" }}
           ] }
        }
}]);

Сега не ще бъде покрита заявка, тъй като attributes.value и name са вградени, да не говорим за факта, че name не е в индекса.

Трябва индексът да бъде {"type":1, "attributes.value":1, "attributes.name":1} за най-добро представяне, въпреки че все още няма да бъде покрито, ще бъде много по-селективно от сега.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $concatArrays

  2. Не може да се свърже с MongoDB atlas база данни

  3. mongodb:използвайте вложен документ или отделни колекции с препратки

  4. Урок за MongoDB:Свързване с MongoDB в Scala

  5. Свържете NodeJS към MongoDB Droplet