Cara Membuat Indeks Unik di MongoDB

Cara Membuat Indeks Unik Di Mongodb



Di MongoDB, indeks unik memastikan bahwa setiap nilai dalam bidang atau kelompok bidang tertentu di dalam koleksi adalah unik. Dengan menggunakan metode createIndex(), kita dapat membuat bidang indeks unik untuk koleksi tertentu. Untuk tujuan menjaga integritas data dan menghindari entri duplikat di bidang penting, indeks unik sangat membantu. Artikel tersebut membahas cara membuat indeks unik untuk koleksi tertentu. db.kandidat.insertMany([

{ nama: 'Alexa Bill' , nilai: 'A' , kursus: 'piton' },

{ nama: 'Jane Mark' , nilai: 'B' , kursus: 'Jawa' },

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

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

]);

Kita juga dapat membuat bidang indeks unik ketika koleksi tersebut ada dengan beberapa dokumen di dalamnya. Untuk ini, kami memasukkan dokumen ke dalam koleksi baru yaitu “kandidat” yang permintaan penyisipannya diberikan sebagai berikut:







Contoh 1: Buat Indeks Unik dari Satu Bidang

Kita dapat membuat indeks menggunakan metode createIndex() dan kita dapat membuat bidang tersebut unik dengan menentukan opsi unik dengan Boolean “true”.



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

Di sini, kami memulai metode createIndex() pada koleksi “kandidat” untuk membuat indeks unik dari bidang tertentu. Kemudian, kami menyediakan kolom “nilai” dengan nilai “1” untuk spesifikasi indeks. Nilai “1” di sini mewakili indeks koleksi yang menaik. Selanjutnya, kita tentukan opsi “unik” dengan nilai “benar” untuk menegakkan keunikan bidang “nilai”.



Outputnya menunjukkan bahwa indeks unik pada bidang “nilai” dibuat untuk koleksi “kandidat”:





Contoh 2: Buat Indeks Unik Lebih dari Satu Bidang

Pada contoh sebelumnya, hanya satu bidang yang dibuat sebagai indeks unik. Namun kita juga bisa membuat dua field sebagai indeks unik secara bersamaan menggunakan metode createIndex().



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

Di sini, kita memanggil metode createIndex() pada koleksi “kandidat” yang sama. Kami menentukan dua bidang ke metode createIndex() – “grade” dan “course” – dengan nilai “1” sebagai ekspresi pertama. Kemudian, kami menetapkan opsi unik dengan nilai “benar” untuk membuat dua bidang unik ini.

Outputnya mewakili dua indeks unik, “grade_1” dan “course_1”, untuk koleksi “kandidat” berikut:

Contoh 3: Buat Indeks Unik Gabungan dari Bidang

Namun, kita juga dapat membuat indeks gabungan unik dalam koleksi yang sama secara bersamaan. Kami mencapainya melalui kueri berikut:

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

Kita menggunakan metode createIndex() lagi untuk membuat indeks unik gabungan untuk koleksi “kandidat”. Kali ini, kita melewati tiga bidang – “nilai”, “nama”, dan “kursus” – yang bertindak sebagai bidang indeks menaik untuk koleksi “kandidat”. Selanjutnya, kita memanggil opsi 'unik' untuk menjadikan bidang tersebut unik karena 'benar' ditetapkan terhadap opsi tersebut.

Outputnya menampilkan hasil yang menunjukkan bahwa ketiga bidang kini menjadi indeks unik dari koleksi yang ditentukan:

Contoh 4: Buat Indeks Unik Nilai Bidang Duplikat

Sekarang, kami mencoba membuat indeks unik untuk nilai bidang duplikat yang memicu kesalahan untuk mempertahankan batasan keunikan.

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

Di sini, kami menerapkan kriteria indeks unik untuk bidang yang berisi nilai serupa. Di dalam metode createIndex(), kita memanggil bidang “nama” dengan nilai “1” untuk menjadikannya indeks unik dan menentukan opsi unik dengan nilai “benar”. Karena kedua dokumen memiliki kolom “nama” dengan nilai yang sama, kami tidak dapat menjadikan kolom ini sebagai indeks unik dari koleksi “kandidat”. Kesalahan kunci duplikat dipicu saat eksekusi kueri.

Seperti yang diharapkan, output memberikan hasil karena bidang nama memiliki nilai yang sama untuk dua dokumen berbeda:

Oleh karena itu, kami memperbarui koleksi “kandidat” dengan memberikan nilai unik pada setiap kolom “nama” di dokumen dan kemudian membuat kolom “nama” sebagai indeks unik. Mengeksekusi kueri tersebut biasanya membuat bidang “nama” sebagai indeks unik seperti yang ditunjukkan berikut ini:

Contoh 5: Buat Indeks Unik dari Bidang yang Hilang

Alternatifnya, kami menerapkan metode createIndex() pada bidang yang tidak ada di dokumen koleksi mana pun. Akibatnya, indeks menyimpan nilai null terhadap bidang tersebut, dan operasi gagal karena pelanggaran terhadap nilai bidang tersebut.

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

Di sini, kami menggunakan metode createIndex() di mana bidang “email” diberikan dengan nilai “1”. Bidang “email” tidak ada dalam koleksi “kandidat” dan kami mencoba menjadikannya indeks unik untuk koleksi “kandidat” dengan mengatur opsi unik ke “benar”.

Saat kueri untuk ini dijalankan, kami mendapatkan kesalahan pada output karena bidang “email” tidak ada dalam koleksi “kandidat”:

Contoh 6: Buat Indeks Unik suatu Bidang dengan Opsi Renggang

Selanjutnya, indeks unik juga dapat dibuat dengan opsi sparse. Fungsi dari indeks renggang adalah hanya mencakup dokumen yang memiliki bidang yang diindeks, tidak termasuk dokumen yang tidak memiliki bidang yang diindeks. Kami menyediakan struktur berikut untuk menyiapkan opsi sparse:

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

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

Di sini, kami menyediakan metode createIndex() di mana bidang “kursus” disetel dengan nilai “1”. Setelah itu, kami menentukan opsi tambahan untuk menyetel bidang indeks unik yaitu “kursus”. Opsinya mencakup “nama” yang menetapkan indeks “unique_sparse_course_index”. Kemudian, kita memiliki opsi “unik” yang ditentukan dengan nilai “benar” dan opsi “jarang” juga disetel ke “benar”.

Outputnya menciptakan indeks unik dan jarang pada bidang “kursus” seperti yang ditunjukkan berikut ini:

Contoh 7: Tampilkan Indeks Unik yang Dibuat Menggunakan Metode GetIndexes()

Pada contoh sebelumnya, hanya indeks unik yang dibuat untuk koleksi yang disediakan. Untuk melihat dan mendapatkan informasi tentang indeks unik untuk koleksi “kandidat”, kami menggunakan metode getIndexes() berikut:

db.kandidat.getIndexes();

Di sini, kita memanggil fungsi getIndexes() pada koleksi “kandidat”. Fungsi getIndexes() mengembalikan semua bidang indeks untuk koleksi “kandidat” yang kita buat pada contoh sebelumnya.

Outputnya menampilkan indeks unik yang kita buat untuk koleksi: baik indeks unik, indeks gabungan, atau indeks renggang unik:

Kesimpulan

Kami mencoba membuat indeks unik untuk bidang koleksi tertentu. Kami menjelajahi berbagai cara untuk membuat indeks unik untuk satu bidang dan beberapa bidang. Kami juga mencoba membuat indeks unik yang operasinya gagal karena pelanggaran batasan unik.