MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Pengindeksan Mongo pada array objek vs objek

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!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ubah keymap menjadi vektor menggunakan kerangka MongoDB

  2. Tidak dapat menginstal driver mongo-php di OS X 10.11

  3. bind_ip MongoDB tidak akan berfungsi kecuali diatur ke 0.0.0.0

  4. Kueri bersarang luwak pada Model berdasarkan bidang model yang direferensikannya

  5. Luwak - findByIdAndUpdate - tidak berfungsi dengan req.body