Frågan kommer säkert att bli mycket lättare i det andra fallet, där "grupper" är en uppsättning underdokument, var och en med ett "id" och ett "namn".
Mongo stöder inte "jokertecken"-frågor, så om dina dokument var strukturerade på det första sättet och du ville hitta ett underdokument med värdet "hej", men inte visste att nyckeln var 152, skulle du inte kunna gör det. Med den andra dokumentstrukturen kan du enkelt fråga efter {"groups.name":"hej"}.
För mer information om att söka efter inbäddade objekt, se dokumentationen med titeln "Dot Notation (Reaching into Objects)" http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 Avsnitten "Värde i en array" och "Värde i ett inbäddat objekt" i dokumentationen "Advanced Queries" är också användbara:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
För ett index på {'groups.id':1} kommer en indexpost att skapas för varje "id"-nyckel i varje "groups"-array i varje dokument. Med ett index på "grupper" kommer endast en indexpost att skapas per dokument.
Om du har dokument av den andra typen och ett index på grupper måste dina frågor matcha hela underdokument för att kunna använda indexet. Till exempel med tanke på dokumentet:
{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }
Frågan
db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }})
kommer att använda indexet, men frågorna
db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})
eller
db.<collectionName>.find({"groups.name":"hi"})
ska inte.
Indexet/indexen som du skapar bör bero på vilka frågor du oftast kommer att utföra.
Du kan experimentera med vilka (om några) index som dina frågor använder med kommandot .explain(). http://www.mongodb.org/display/DOCS/Explain Den första raden, "markören" kommer att berätta vilket index som används. "cursor" :"BasicCursor" indikerar att en fullständig samlingsskanning utförs.
Det finns mer information om indexering i dokumentationen:http://www.mongodb.org/display /DOCS/Index
Avsnittet "Indexing Array Elements" i ovanstående länkar till dokumentet med titeln "Multikeys":http://www.mongodb.org/display/DOCS/Multikeys
Förhoppningsvis kommer detta att förbättra din förståelse för hur man frågar på inbäddade dokument och hur index används. Meddela oss om du har några följdfrågor!