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

Mongo индексиране на обектни масиви срещу обекти

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

Mongo не поддържа заявки със заместващ знак, така че ако вашите документи са структурирани по първия начин и искате да намерите поддокумент със стойността „hi“, но не знаете, че ключът е 152, няма да можете да направи го. С втората структура на документа можете лесно да направите заявка за {"groups.name":"hi"}.

За повече информация относно заявките за вградени обекти, моля, вижте документацията, озаглавена „Dot Notation (Reaching into Objects)“ http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 Секциите „Стойност в масив“ и „Стойност във вграден обект“ на документацията „Разширени заявки“ също са полезни:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

За индекс на {'groups.id':1} ще бъде създаден индексен запис за всеки ключ "id" във всеки масив "groups" във всеки документ. С индекс на "групи" ще бъде създаден само един запис на индекс на документ.

Ако имате документи от втория тип и индекс на групи, вашите заявки ще трябва да съответстват на цели поддокументи, за да използвате индекса. Например, даден документ:

{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }

Заявката

db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }}) 

ще използва индекса, но заявките

db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})

или

db.<collectionName>.find({"groups.name":"hi"})

няма да.

Индексът(ите), който създавате, трябва да зависи от това кои заявки ще изпълнявате най-често.

Можете да експериментирате с кои (ако има такива) индекси, които вашите заявки използват с командата .explain(). http://www.mongodb.org/display/DOCS/Explain Първият ред, "курсор", ще ви каже кой индекс се използва. "cursor" :"BasicCursor" показва, че се извършва пълно сканиране на колекцията.

Има повече информация относно индексирането в документацията:http://www.mongodb.org/display /DOCS/Индекси

Разделът „Индексиране на елементи на масив“ от горните връзки към документа, озаглавен „Multikeys“:http://www.mongodb.org/display/DOCS/Multikeys

Надяваме се, че това ще подобри разбирането ви за това как да правите заявки за вградени документи и как се използват индексите. Моля, уведомете ни, ако имате допълнителни въпроси!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. spring boot + mongodb + проблем с връзката с камилски маршрут

  2. Компилиране на MongoDB C++ драйвер на Cygwin

  3. MongoDB страниране на масиви - Проверете дали $slice е достигнало началото на масива

  4. Заявка на MongoDB $in с масив от елемент с регулярни изрази

  5. Преглед на индексирането на база данни за MongoDB