Cara Membuat Indeks Unik dalam MongoDB

Cara Membuat Indeks Unik Dalam Mongodb



Dalam MongoDB, indeks unik memastikan bahawa setiap nilai dalam medan atau kumpulan medan tertentu dalam koleksi adalah unik. Menggunakan kaedah createIndex(), kita boleh membuat medan indeks unik untuk koleksi tertentu. Untuk tujuan mengekalkan integriti data dan mengelakkan entri pendua dalam medan penting, indeks unik berguna. Artikel itu merangkumi cara untuk mencipta indeks unik untuk koleksi tertentu. db.candidates.insertMany([

{ nama: 'Alexa Bill' , gred: 'A' , kursus: 'python' },

{ nama: 'Jane Marks' , gred: 'B' , kursus: 'java' },

{ nama: 'Paul Ken' , gred: 'C' , kursus: 'C#' },

{ nama: 'Emily Jeo' , gred: 'D' , kursus: 'php' }

]);

Kami juga boleh mencipta medan indeks yang unik apabila koleksi hadir dengan beberapa dokumen di dalamnya. Untuk ini, kami memasukkan dokumen dalam koleksi baharu iaitu 'calon' yang pertanyaan untuk sisipannya diberikan seperti berikut:







Contoh 1: Cipta Indeks Unik bagi Medan Tunggal

Kita boleh mencipta indeks menggunakan kaedah createIndex() dan kita boleh menjadikan medan itu unik dengan menentukan pilihan unik dengan 'true' Boolean.



db.candidates.createIndex( { gred: 1 }, { unik: benar } )

Di sini, kami memulakan kaedah createIndex() pada koleksi 'calon' untuk mencipta indeks unik medan tertentu. Kemudian, kami menyediakan medan 'gred' dengan nilai '1' untuk spesifikasi indeks. Nilai '1' di sini mewakili indeks menaik koleksi. Seterusnya, kami menentukan pilihan 'unik' dengan nilai 'benar' untuk menguatkuasakan keunikan medan 'gred'.



Output menunjukkan bahawa indeks unik pada medan 'gred' dicipta untuk koleksi 'calon':





Contoh 2: Cipta Indeks Unik Lebih Daripada Satu Medan

Dalam contoh sebelumnya, hanya satu medan dibuat sebagai indeks unik. Tetapi kita juga boleh mencipta dua medan sebagai indeks unik secara serentak menggunakan kaedah createIndex().



db.candidates.createIndex( { gred: 1 , kursus: 1 }, { unik: benar } )

Di sini, kami memanggil kaedah createIndex() pada koleksi 'calon' yang sama. Kami menentukan dua medan untuk kaedah createIndex() - 'gred' dan 'kursus' - dengan nilai '1' sebagai ungkapan pertama. Kemudian, kami menetapkan pilihan unik dengan nilai 'benar' untuk mencipta dua medan unik ini.

Output mewakili dua indeks unik, 'gred_1' dan 'kursus_1', untuk koleksi 'calon' berikut:

Contoh 3: Buat Indeks Unik Kompaun bagi Medan

Walau bagaimanapun, kami juga boleh mencipta indeks kompaun unik dalam koleksi yang sama secara serentak. Kami mencapai ini melalui pertanyaan berikut:

db.candidates.createIndex( { nama: 1 , gred: 1 , kursus: 1 }, { unik: benar }

Kami menggunakan kaedah createIndex() sekali lagi untuk mencipta indeks unik kompaun untuk koleksi 'calon'. Kali ini, kami melepasi tiga medan - 'gred', 'nama' dan 'kursus' - yang bertindak sebagai medan indeks menaik untuk koleksi 'calon'. Seterusnya, kami memanggil pilihan 'unik' untuk menjadikan medan unik kerana 'benar' diberikan terhadap pilihan itu.

Output memaparkan hasil yang menunjukkan bahawa ketiga-tiga medan kini merupakan indeks unik koleksi yang ditentukan:

Contoh 4: Cipta Indeks Unik Nilai Medan Pendua

Sekarang, kami cuba membuat indeks unik untuk nilai medan pendua yang mencetuskan ralat untuk mengekalkan kekangan keunikan.

db.candidates.createIndex({nama: 1 },{unique:true})

Di sini, kami menggunakan kriteria indeks unik untuk medan yang mengandungi nilai yang serupa. Di dalam kaedah createIndex(), kami memanggil medan 'nama' dengan nilai '1' untuk menjadikannya indeks unik dan menentukan pilihan unik dengan nilai 'benar'. Memandangkan kedua-dua dokumen mempunyai medan 'nama' dengan nilai yang sama, kami tidak boleh menjadikan medan ini sebagai indeks unik koleksi 'calon'. Ralat kunci pendua dicetuskan selepas pelaksanaan pertanyaan.

Seperti yang dijangkakan, output menjana hasil kerana medan nama mempunyai nilai yang sama untuk dua dokumen berbeza:

Oleh itu, kami mengemas kini koleksi 'calon' dengan memberikan nilai unik kepada setiap medan 'nama' dalam dokumen dan kemudian mencipta medan 'nama' sebagai indeks unik. Melaksanakan pertanyaan itu secara amnya mencipta medan 'nama' sebagai indeks unik seperti yang ditunjukkan dalam yang berikut:

Contoh 5: Cipta Indeks Unik Medan Hilang

Sebagai alternatif, kami menggunakan kaedah createIndex() pada medan yang tidak wujud dalam mana-mana dokumen koleksi. Akibatnya, indeks menyimpan nilai nol terhadap medan itu dan operasi gagal disebabkan pelanggaran terhadap nilai medan.

db.candidates.createIndex( { e-mel: 1 }, { unik: benar } )

Di sini, kami menggunakan kaedah createIndex() di mana medan 'e-mel' disediakan dengan nilai '1'. Medan 'e-mel' tidak wujud dalam koleksi 'calon' dan kami cuba menjadikannya indeks unik untuk koleksi 'calon' dengan menetapkan pilihan unik kepada 'benar'.

Apabila pertanyaan untuk ini dilaksanakan, kami mendapat ralat dalam output kerana medan 'e-mel' tiada dalam koleksi 'calon':

Contoh 6: Cipta Indeks Unik Medan dengan Pilihan Jarang

Seterusnya, indeks unik juga boleh dibuat dengan pilihan jarang. Kefungsian indeks jarang ialah ia hanya merangkumi dokumen yang mempunyai medan diindeks, tidak termasuk dokumen yang tidak mempunyai medan diindeks. Kami menyediakan struktur berikut untuk menyediakan pilihan jarang:

db.candidates.createIndex( { kursus : 1 },

{ nama: 'unique_sparse_course_index' , unik: benar, jarang: benar } )

Di sini, kami menyediakan kaedah createIndex() di mana medan 'kursus' ditetapkan dengan nilai '1'. Selepas itu, kami menentukan pilihan tambahan untuk menetapkan medan indeks unik iaitu 'kursus'. Pilihan termasuk 'nama' yang menetapkan indeks 'unique_sparse_course_index'. Kemudian, kami mempunyai pilihan 'unik' yang ditentukan dengan nilai 'benar' dan pilihan 'jarang' juga ditetapkan kepada 'benar'.

Output mencipta indeks yang unik dan jarang pada medan 'kursus' seperti yang ditunjukkan dalam yang berikut:

Contoh 7: Tunjukkan Indeks Unik Dicipta Menggunakan Kaedah GetIndexes().

Dalam contoh sebelumnya, hanya indeks unik dicipta untuk koleksi yang disediakan. Untuk melihat dan mendapatkan maklumat tentang indeks unik untuk koleksi 'calon', kami menggunakan kaedah getIndexes() berikut:

db.candidates.getIndexes();

Di sini, kami memanggil fungsi getIndexes() pada koleksi 'calon'. Fungsi getIndexes() mengembalikan semua medan indeks untuk koleksi 'calon' yang kami buat dalam contoh sebelumnya.

Output memaparkan indeks unik yang kami buat untuk koleksi: sama ada indeks unik, indeks kompaun atau indeks jarang unik:

Kesimpulan

Kami cuba mencipta indeks unik untuk medan khusus koleksi. Kami meneroka pelbagai cara untuk mencipta indeks unik untuk satu medan dan berbilang medan. Kami juga cuba mencipta indeks unik yang mana operasi gagal disebabkan oleh pelanggaran kekangan yang unik.