Pertanyaan indeks liputan MongoDB
Dokumentasi rasmi MongoDB menyatakan bahawa pertanyaan liputan ialah pertanyaan berikut:
Semua medan pertanyaan adalah sebahagian daripada indeks
Semua medan yang dikembalikan oleh pertanyaan adalah dalam indeks yang sama
Memandangkan semua medan yang muncul dalam pertanyaan adalah sebahagian daripada indeks, MongoDB menghapuskan keperluan untuk mencari keseluruhan dokumen data untuk memadankan keadaan pertanyaan dan mengembalikan hasil pertanyaan menggunakan indeks yang sama.
Oleh kerana indeks hidup dalam RAM, mendapatkan data daripada indeks adalah lebih pantas daripada membaca data dengan mengimbas dokumen.
Menggunakan pertanyaan indeks meliputi
Untuk menguji pertanyaan indeks penutup, gunakan koleksi pengguna berikut:
{ "_id": ObjectId("53402597d852426020000002"), "contact": "987654321", "dob": "01-01-1991", "gender": "M", "name": "Tom Benzamin", "user_name": "tombenzamin" }
Kami mencipta indeks bersama dalam koleksi pengguna dengan medan jantina dan nama_pengguna :
>db.users.ensureIndex({gender:1,user_name:1})
Kini, indeks akan meliputi pertanyaan berikut:
>db.users.find({gender:"M"},{user_name:1,_id:0})
Iaitu, untuk pertanyaan di atas, MongoDB tidak akan melihat dalam fail pangkalan data. Sebaliknya, ia menarik data daripada indeks, yang merupakan pertanyaan data yang sangat pantas.
Memandangkan indeks kami tidak termasuk medan _id, _id akan dikembalikan secara lalai dalam pertanyaan dan kami boleh mengecualikannya daripada set hasil pertanyaan MongoDB.
Contoh berikut tidak mengecualikan _id, dan pertanyaan tidak akan dilindungi:
>db.users.find({gender:"M"},{user_name:1})
Akhir sekali, jika pertanyaan berikut, pertanyaan indeks penutup tidak boleh digunakan:
Semua medan indeks ialah tatasusunan
Semua medan indeks ialah subdokumen