Запитването със сигурност ще бъде много по-лесно във втория случай, където „групите“ са масив от поддокументи, всеки с „идентификатор“ и „име“.
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
Надяваме се, че това ще подобри разбирането ви за това как да правите заявки за вградени документи и как се използват индексите. Моля, уведомете ни, ако имате допълнителни въпроси!