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

Оптимални съставни индекси за $exists :true (разредени индекси)

Това, което изглежда не разбирате тук, е, че $exists не може да "грабне" индекс по никакъв начин, дори когато е рядък. Както се казва в самата документация:

Примерът, даден в тези страници, е { "$exists": false } заявка. Но обратното логическо условие не прави никаква разлика тук.

За да получите „пълната полза“ от „разредения“ индекс, тогава трябва да вземете предвид „типа“ на данните, които той съдържа, и да направите заявка по подходящ начин.

За числови, нещо като:

db.collection.find({ "a": "foobar", "b": { "$gte": -9999, "$lte": 9999 } })

Което използва индекс и разредения. Или за базирани на текст:

db.collection.find({ "a": "foobar", "b": /.+/ })

Което също ще използва разредения индекс и ще разглежда само тези, където е дефинирано "b".

За "масиви" тогава "внимавайте". Тъй като стойността, която се разглежда, вероятно е една от горните, освен ако не сте направили това:

db.collection.insert({ "a": 1, "b": [[]] })

Къде тогава това е наред:

db.ab.find({ "a": 1, "b": { "$type": 4 } })

Но всъщност няма да използва и „разредения“ индекс поради същите причини $exists няма да работи тук.

Така че трябва да разберете какво означават термините тук и да „заявите по подходящ начин“, за да използвате дефинициите на индекса, които създавате, ако очаквате максимална производителност.

Това са ясни примери, които можете да тествате сами и да видите, че резултатите са верни. Иска ми се основната документация да е по-ясна по тези точки, но също така съм наясно, че много са се опитали да допринесат (и са създали отлични обяснения), но нито едно от тях не е включено до момента.

Предполагам, че затова питате тук.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - различен със заявка не използва индекси

  2. Как да заявявам вложени обекти?

  3. Как да сортирам в мангуста?

  4. Използване на MongoDB от клиент с Javascript

  5. ГРЕШКА:дъщерен процес е неуспешен, излязъл е с грешка номер 48