Dotazování bude jistě mnohem snazší v druhém případě, kde 'skupiny' je pole dílčích dokumentů, z nichž každý má 'id' a 'jméno'.
Mongo nepodporuje „wildcard“ dotazy, takže pokud byly vaše dokumenty strukturovány prvním způsobem a chtěli byste najít dílčí dokument s hodnotou „hi“, ale nevěděli jste, že klíč byl 152, nebyli byste schopni Udělej to. S druhou strukturou dokumentu se můžete snadno dotazovat na {"groups.name":"hi"}.
Další informace o dotazování na vložené objekty naleznete v dokumentaci s názvem „Dot Notation (Reaching into Objects)“ http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 Užitečné jsou také sekce „Hodnota v poli“ a „Hodnota ve vloženém objektu“ v dokumentaci „Pokročilé dotazy“:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
Pro index na {'groups.id':1} bude vytvořen záznam rejstříku pro každý klíč "id" v každém poli "groups" v každém dokumentu. S rejstříkem na "skupinách" bude vytvořena pouze jedna položka rejstříku na dokument.
Pokud máte dokumenty druhého typu a index na skupinách, vaše dotazy se budou muset shodovat s celými dílčími dokumenty, aby bylo možné index použít. Například vzhledem k dokumentu:
{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }
Dotaz
db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }})
bude používat index, ale dotazy
db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})
nebo
db.<collectionName>.find({"groups.name":"hi"})
nebude.
Indexy, které vytvoříte, by měly záviset na tom, jaké dotazy budete nejčastěji provádět.
Pomocí příkazu .explain() můžete experimentovat s tím, které (pokud nějaké) indexy používají vaše dotazy. http://www.mongodb.org/display/DOCS/Explain První řádek, "kurzor", vám řekne, který index se používá. "cursor" :"BasicCursor" znamená, že se provádí úplné skenování kolekce.
Další informace o indexování jsou v dokumentaci:http://www.mongodb.org/display /DOCS/Indexy
Část "Indexing Array Elements" výše odkazuje na dokument s názvem "Multikeys":http://www.mongodb.org/display/DOCS/Multikeys
Doufejme, že to zlepší vaše porozumění tomu, jak se dotazovat na vložené dokumenty a jak se používají indexy. Pokud máte nějaké doplňující otázky, dejte nám vědět!