Bagaimana cara mengatur bidang unik di mongodb?

Terkadang di MongoDB, kita mungkin memerlukan bidang yang hanya berisi nilai unik. Itu berarti nilai duplikat tidak diperbolehkan untuk bidang tertentu di seluruh koleksi. Situasi seperti itu bisa sering terjadi. Misalnya, ada database yang berisi rincian tentang semua karyawan yang bekerja di bidang tertentu. Setiap dokumen memiliki lima bidang – nama, employee_id, umur, lokasi dan tentu saja, bidang _id yang dibuat secara otomatis. Nama, usia, dan lokasi bisa sama untuk beberapa karyawan, tetapi employee_id setiap karyawan selalu unik. Untuk memastikan bahwa setiap dokumen yang dimasukkan ke dalam koleksi harus memiliki employee_id yang unik, kita harus menetapkan semacam centang unik pada employee_id. Pada artikel ini, kita akan membahas cara melakukan pemeriksaan unik di MongoDB

Indeks unik

Setiap kali kami membuat dokumen di MongoDB, kami selalu memiliki bidang _id yang dibuat secara otomatis. Bidang ini menunjukkan id unik untuk dokumen tersebut. Tetapi ketika kita secara manual ingin menetapkan pemeriksaan unik pada suatu bidang atau kombinasi bidang, kita menggunakan indeks unik. Mari kita lihat bagaimana kita bisa menggunakan indeks unik

> db. detail. Temukan()
{ "_Indo". ObjectId("5d667a43f849ba8866dd24ca"), "employee_id". "0001", "nama". "Maks", "Umur". 25, "lokasi". "New York"}
>

Kami memiliki koleksi detail dan ada satu dokumen di dalamnya. Dokumen berisi bidang employee_id, name, age, location, dan _id. Belum ada indeks unik yang dibuat. Jadi apa yang akan terjadi jika kita memasukkan dokumen lain dengan employee_id yang sudah ada?

> db. detail. masukkan({"id_karyawan". "0001", "nama". "Yohanes", "umur". 21, "lokasi". "Texas"})
WriteResult({ "nDimasukkan". 1 })
>

Operasi penyisipan berfungsi bahkan employee_id sama dengan dokumen terakhir. Ini terjadi karena, secara default, tidak ada indeks unik di bidang apa pun. Kami harus membuat indeks unik secara manual. Jadi mari buat indeks unik di bidang employee_id. Tapi pertama-tama, kita harus menghapus salah satu dari dua dokumen tersebut karena employee_id sama di kedua dokumen tersebut

> db. detail. hapusSatu({nama. "Yohanes"})
{"diakui". benar, "deleteCount". 1 }
> db. detail. Temukan()
{ "_Indo". ObjectId("5d667a43f849ba8866dd24ca"), "employee_id". "0001", "nama". "Maks", "Umur". 25, "lokasi". "New York"}
>

Sekarang tidak apa-apa. Mari buat indeks unik untuk bidang employee_id

> db. detail. createIndex({"employee_id". 1}, { unik. BENAR})
{
"membuat Koleksi Secara Otomatis". Salah,
"numIndexesBefore". 1,
"numIndexSetelah". 2,
"oke". 1
}
>

Inilah cara kami membuat indeks unik di MongoDB dengan menggunakan metode createIndex. Metode createIndex memiliki dua parameter – pertama adalah nama bidang, disetel ke 0 dan kedua adalah opsi unik yang disetel ke true. Mari kita coba masukkan dokumen dengan employee_id yang ada sekarang

> db. detail. masukkan({"id_karyawan". "0001", "nama". "Yohanes", "umur". 21, "lokasi". "Texas"})
Hasil Tulis({
"nDimasukkan". 0,
"tulisError". {
"kode". 11000,
"errmsg". "Pengumpulan kesalahan kunci duplikat E11000. demoDB. indeks detail. kunci dup employee_id_1. {. "0001"}"
}
})
>

Kami mencoba memasukkan dokumen dengan employee_id “0001”. Dokumen dengan employee_id serupa sudah ada di koleksi. Inilah sebabnya mengapa operasi penyisipan gagal. Perhatikan pesan kesalahan

"errmsg". "Pengumpulan kesalahan kunci duplikat E11000. demoDB. indeks detail. kunci dup employee_id_1. {. "0001"}"

Ini terjadi karena kami menetapkan indeks unik di bidang employee_id. Mari kita lihat apa yang terjadi saat kita menambahkan dokumen dengan employee_id yang unik

> db. detail. masukkan({"id_karyawan". "0002", "nama". "Yohanes", "umur". 21, "lokasi". "Texas"})
WriteResult({ "nDimasukkan". 1 })
>

Kali ini, employee_id adalah "0002" dan dokumen dimasukkan

Indeks unik pada kombinasi bidang

Di MongoDB, kami juga dapat menetapkan indeks unik pada kombinasi bidang. Misalkan kita ingin semua dokumen dalam koleksi kita harus memiliki kombinasi nama dan lokasi yang unik. Jika ada dokumen dengan nama "Lisa" dan lokasi "Texas", kami tidak dapat menambahkan dokumen lain yang memiliki bidang nama sebagai "Lisa" dan bidang lokasi sebagai "Texas"

Mari kita lihat bagaimana kita bisa membuat indeks yang unik

> db. detail. buatIndeks({"nama". 1, "lokasi". 1}, { unik. BENAR})
{
"membuat Koleksi Secara Otomatis". Salah,
"numIndexesBefore". 1,
"numIndexSetelah". 2,
"oke". 1
}
>

Kami hanya perlu meneruskan bidang di parameter pertama yang ingin kami terapkan indeks uniknya. Koleksi detail sudah memiliki bidang dengan nama "Lisa" dan lokasi "Texas". Mari coba tambahkan satu dokumen lagi dengan nilai tersebut

> db. detail. masukkan({"id_karyawan". "0002", "nama". "Lisa", "umur". 24, "lokasi". "Texas"})
Hasil Tulis({
"nDimasukkan". 0,
"tulisError". {
"kode". 11000,
"errmsg". "Pengumpulan kesalahan kunci duplikat E11000. demoDB. indeks detail. name_1_location_1 dup kunci. {. "Lisa",. "Texas" }"
}
})
>

Ya, itu menunjukkan kesalahan karena kami sudah menerapkan indeks unik pada kombinasi bidang nama dan lokasi

Kesimpulan

Pemeriksaan unik digunakan di hampir setiap basis data yang ada. Ini sangat membantu dalam memelihara database. MongoDB menyediakan indeks unik untuk menerapkan pemeriksaan unik. Kami dapat menerapkan indeks unik pada satu bidang atau kombinasi bidang

Apa itu indeks unik di MongoDB?

Indeks unik memastikan bahwa nilai tertentu dapat disimpan hanya sekali untuk bidang tertentu. Setiap kali Anda membuat koleksi di Mongo, indeks unik dibuat secara otomatis di kolom _id. Inilah yang memastikan bahwa tidak ada dua dokumen dengan _id yang sama yang disimpan

Bagaimana cara memeriksa batasan unik di MongoDB?

Pembatasan Unik MongoDB memastikan bahwa bidang yang diindeks di dalamnya, tidak menyimpan nilai duplikat untuk bidang yang sama, i. e. , memastikan keunikan bidang. Secara default, MongoDB menerapkan batasan unik ini pada kolom “_id”, saat memasukkan data baru .

Bagaimana cara mendapatkan nilai unik dari MongoDB?

Dalam MongoDB, metode yang berbeda () menemukan nilai yang berbeda untuk bidang tertentu di seluruh koleksi tunggal dan mengembalikan hasilnya dalam sebuah larik. Dibutuhkan tiga parameter, yang pertama adalah bidang untuk mengembalikan nilai yang berbeda dan yang lainnya opsional.

Bagaimana cara membuat bidang bukan nol di MongoDB?

Pada dasarnya, kita dapat menggunakan metode $exists untuk mengimplementasikan not null di MongoDB . Ketika