Bahkan perpustakaan populer seperti Mongoose membuat indeks unik di bawah tenda untuk menerapkan validasi unik pada koleksi Mongo Show Bagaimana cara kerja indeks unik di bawah tenda?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 bidang _id. Inilah yang memastikan bahwa tidak ada dua dokumen dengan _id yang sama yang disimpan Indeks unik diberlakukan sebelum, selama, dan setelah pembuatan Jika Anda memiliki data dalam kumpulan yang tidak unik untuk bidang tertentu, maka Anda akan mendapatkan kesalahan DuplicateKey saat membuat indeks di tempat pertama Ini termasuk tidak adanya bidang target. Jika dokumen dalam koleksi Anda tidak memiliki bidang x dan Anda membuat indeks unik pada x, maka Anda tidak dapat menambahkan dokumen baru tanpa bidang x. Ini karena x yang hilang pada dua dokumen tidaklah unik Dengan menggunakan konsep yang sama ini, Anda dapat memastikan keunikan di bidang lain. Hal-hal seperti email, nama pengguna, kartu kredit, SSN, nomor telepon adalah kandidat kuat untuk keunikan Bagaimana cara membuat indeks unik di MongoDB?Membuat indeks unik memerlukan penyetelan bendera unik ke true db.people.createIndex({email:1}, {unique:true}) Perhatikan bagaimana {unique. true} adalah opsi yang ditentukan saat membuat indeks apa pun Sekarang jika Anda mencoba menambahkan dua dokumen dengan nilai yang sama untuk email, Anda akan mendapatkan kesalahan Kunci Duplikat Perhatikan bahwa jika koleksi Anda sudah memiliki nilai duplikat untuk bidang yang Anda coba buat indeks uniknya, itu juga akan menimbulkan kesalahan Sementara contoh ini mendemonstrasikan penambahan bendera unik ke indeks bidang tunggal, Anda juga bisa membuat indeks gabungan menjadi unik db.getCollection('people').createIndex({email:1,user:1}, {unique:true})_ Sekarang jika Anda mencoba memasukkan dua dokumen dengan nilai yang sama untuk email DAN pengguna, Anda akan mendapatkan kesalahan Kunci Duplikat dan ketika saya memulai server saya dan melakukan pengujian API saya menggunakan Paw (REST Client seperti Postman), saya menemukan bahwa saya dapat memasukkan email yang sama berulang kali dan bukan itu yang saya inginkan Saya pergi ke Google seperti biasa untuk mencari solusi atas ketidaknormalan ini, berikut hal yang saya coba tidak berhasil
ketika yang di atas tidak berhasil, saya yang di bawah ini
ketika yang ini juga tidak berfungsi, saya juga diminta untuk memodifikasi kode saya dengan ini
Masuk ke mode layar penuh Keluar dari mode layar penuh
Saya tidak melakukan ini karena merasa sangat tidak nyaman menggunakan plugin untuk menerapkan batasan unik pada bidang tertentu Saya benar-benar tidak tahu mengapa solusi yang disebutkan di atas tidak berhasil sama sekali untuk saya. Namun, saya menemukan solusi yang menghasilkan keajaiban, dan menurut saya metode ini adalah pendekatan terbaik menemukan pendekatan ini yang berhasil untuk saya, tidak menyadari bahwa $gt dapat digunakan dengan cara ini Saya memiliki tabel bernama
Namun, ketika saya melakukan kueri seperti _Saya dapat melihat MongoDB memilih untuk menggunakan COLLSCAN daripada menggunakan indeks IXSCAN. Dalam kasus saya karena nilai url yang saya berikan adalah string, dan harus dicakup oleh index. Mengapa mongo memilih untuk melakukan COLLSCAN penuh? Ketika saya menjalankan kueri Nilai nol adalah pengganti untuk nilai yang tidak diketahui dalam kedua kasus, tetapi semantik untuk perbandingan dan pengindeksan mungkin berbeda tergantung pada database yang Anda bandingkan. Misalnya, SQL Server digunakan untuk (dan mungkin masih) melarang banyak nol dalam indeks unik secara default – Anda harus membuat indeks unik yang difilter (analog dengan indeks parsial di MongoDB) Saya pikir cara paling mudah untuk mengabaikan Untuk informasi lebih lanjut tentang semantik
Sepertinya Anda telah menemukan solusi yang dapat diterima untuk kasus penggunaan Anda Jika bukan itu masalahnya atau Anda sedang mencari saran lebih lanjut tentang topik ini, berikan beberapa informasi lebih lanjut tentang lingkungan Anda
Per jawaban yang Anda rujuk dari Stack Overflow, Anda juga dapat menggunakan pencocokan
|