Query's zullen zeker een stuk eenvoudiger zijn in het tweede geval, waar 'groups' een array van subdocumenten is, elk met een 'id' en een 'name'.
Mongo ondersteunt geen "wildcard"-query's, dus als uw documenten op de eerste manier zijn gestructureerd en u een subdocument met de waarde "hi" wilt vinden, maar niet wist dat de sleutel 152 was, zou u niet in staat zijn om doe het. Met de tweede documentstructuur kunt u eenvoudig zoeken naar {"groups.name":"hi"}.
Voor meer informatie over het opvragen van ingesloten objecten, zie de documentatie met de titel "Dot Notation (Reaching into Objects)" http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 De secties "Waarde in een array" en "Waarde in een ingesloten object" van de documentatie "Advanced Queries" zijn ook nuttig:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
Voor een index op {'groups.id':1} wordt een indexitem gemaakt voor elke "id"-sleutel in elke "groups"-array in elk document. Bij een index op "groepen" wordt er slechts één indexitem per document aangemaakt.
Als u documenten van het tweede type heeft, en een index op groepen, zullen uw zoekopdrachten moeten overeenkomen met volledige subdocumenten om gebruik te kunnen maken van de index. Bijvoorbeeld, gegeven het document:
{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }
De vraag
db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }})
zal gebruik maken van de index, maar de queries
db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})
of
db.<collectionName>.find({"groups.name":"hi"})
zal niet.
De index(en) die u maakt, moeten afhangen van de zoekopdrachten die u het meest zult uitvoeren.
Met de opdracht .explain() kunt u experimenteren met welke (indien van toepassing) indexen uw zoekopdrachten gebruiken. http://www.mongodb.org/display/DOCS/Explain De eerste regel, "cursor" zal u vertellen welke index wordt gebruikt. "cursor" :"BasicCursor" geeft aan dat een volledige collectiescan wordt uitgevoerd.
Er is meer informatie over indexeren in de documentatie:http://www.mongodb.org/display /DOCS/Indexen
De sectie "Array-elementen indexeren" van de bovenstaande links naar het document met de titel "Multikeys":http://www.mongodb.org/display/DOCS/Multikeys
Hopelijk verbetert dit uw begrip van hoe u op ingesloten documenten kunt zoeken en hoe indexen worden gebruikt. Laat het ons weten als je vervolgvragen hebt!