Permintaan akan jauh lebih mudah dalam kasus kedua, di mana 'grup' adalah larik sub-dokumen, masing-masing dengan 'id' dan 'nama'.
Mongo tidak mendukung kueri "wildcard", jadi jika dokumen Anda disusun dengan cara pertama dan Anda ingin menemukan sub-dokumen dengan nilai "hai", tetapi tidak tahu bahwa kuncinya adalah 152, Anda tidak akan dapat lakukan. Dengan struktur dokumen kedua, Anda dapat dengan mudah menanyakan {"groups.name":"hi"}.
Untuk informasi lebih lanjut tentang kueri objek yang disematkan, silakan lihat dokumentasi berjudul "Notasi Titik (Menjangkau Objek)" http://www.mongodb.org/display/DOCS/Dot+Notation+%28Reaching+into+Objects%29 Bagian "Nilai dalam Array" dan "Nilai dalam Objek Tertanam" dari dokumentasi "Kueri Lanjutan" juga berguna:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
Untuk indeks pada {'groups.id':1}, entri indeks akan dibuat untuk setiap kunci "id" di setiap larik "groups" di setiap dokumen. Dengan indeks pada "grup", hanya satu entri indeks yang akan dibuat per dokumen.
Jika Anda memiliki dokumen jenis kedua, dan indeks pada grup, kueri Anda harus cocok dengan seluruh sub-dokumen untuk menggunakan indeks. Misalnya, diberikan dokumen:
{ "_id" : 1, "groups" : [ { "id" : 152, "name" : "hi" }, { "id" : 111, "name" : "group2" } ] }
Kueri
db.<collectionName>.find({groups:{ "id" : 152, "name" : "hi" }})
akan menggunakan indeks, tetapi kueri
db.<collectionName>.find({"groups":{$elemMatch:{name:"hi"}}})
atau
db.<collectionName>.find({"groups.name":"hi"})
tidak akan.
Indeks yang Anda buat harus bergantung pada kueri mana yang paling sering Anda lakukan.
Anda dapat bereksperimen dengan indeks mana (jika ada) yang digunakan kueri Anda dengan perintah .explain(). http://www.mongodb.org/display/DOCS/Explain Baris pertama, "kursor" akan memberi tahu Anda indeks mana yang sedang digunakan. "cursor" :"BasicCursor" menunjukkan bahwa pemindaian koleksi lengkap sedang dilakukan.
Ada informasi lebih lanjut tentang pengindeksan dalam dokumentasi:http://www.mongodb.org/display /DOCS/Indeks
Bagian "Indexing Array Elements" dari tautan di atas ke dokumen berjudul "Multikeys":http://www.mongodb.org/display/DOCS/Multikeys
Semoga ini akan meningkatkan pemahaman Anda tentang cara membuat kueri pada dokumen yang disematkan, dan bagaimana indeks digunakan. Beri tahu kami jika Anda memiliki pertanyaan lanjutan!