Pengindeksan lanjutan MongoDB
Pertimbangkan koleksi dokumen (pengguna):
{ "address": { "city": "Los Angeles", "state": "California", "pincode": "123" }, "tags": [ "music", "cricket", "blogs" ], "name": "Tom Benzamin" }
Dokumen di atas mengandungi subdokumen alamat dan tatasusunan tag.
Medan tatasusunan indeks
Andaikan kami mendapatkan semula pengguna berdasarkan teg, untuk ini kami perlu mengindeks teg tatasusunan dalam koleksi.
Untuk mencipta indeks dalam tatasusunan, anda perlu mengindeks setiap medan dalam tatasusunan secara bergilir-gilir. Oleh itu, apabila kami mencipta indeks untuk teg tatasusunan, kami akan mencipta indeks berasingan untuk tiga nilai muzik, kriket dan blog.
Buat indeks tatasusunan menggunakan arahan berikut:
>db.users.ensureIndex({"tags":1})
Selepas mencipta indeks, kami boleh mendapatkan semula medan tag koleksi seperti ini:
>db.users.find({tags:"cricket"})
Untuk mengesahkan bahawa kami sedang menggunakan indeks, kita boleh menggunakan perintah explain:
>db.users.find({tags:"cricket"}).explain()
Hasil pelaksanaan arahan di atas akan memaparkan "cursor" : "BtreeCursor tags_1", yang bermaksud bahawa indeks telah digunakan.
Medan sub-dokumen indeks
Andaikan kita perlu mendapatkan semula dokumen melalui medan bandar, negeri dan kod pin Memandangkan medan ini adalah medan sub-dokumen, kita perlu mengindeks sub-dokumen tersebut.
Buat indeks untuk tiga medan subdokumen dengan arahan berikut:
>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
Setelah indeks dibuat, kita boleh menggunakan medan subdokumen untuk mendapatkan semula data:
>db.users.find({"address.city":"Los Angeles"})
Ingat Ungkapan pertanyaan mesti mengikut susunan indeks yang ditentukan. Jadi indeks yang dibuat di atas akan menyokong pertanyaan berikut:
>db.users.find({"address.city":"Los Angeles","address.state":"California"})
Juga menyokong pertanyaan berikut:
>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})