Pesan kesalahan mengatakan bahwa sudah ada catatan dengan null
sebagai email. Dengan kata lain, Anda sudah memiliki pengguna tanpa alamat email.
Dokumentasi yang relevan untuk ini:
Jika dokumen tidak memiliki nilai untuk bidang yang diindeks dalam indeks unik, indeks akan menyimpan nilai nol untuk dokumen ini. Karena kendala unik, MongoDB hanya akan mengizinkan satu dokumen yang tidak memiliki bidang yang diindeks. Jika ada lebih dari satu dokumen tanpa nilai untuk bidang yang diindeks atau bidang yang diindeks tidak ada, pembuatan indeks akan gagal dengan kesalahan kunci duplikat.
Anda dapat menggabungkan batasan unik dengan indeks sparse untuk memfilter nilai nol ini dari indeks unik dan menghindari kesalahan.
indeks unik
Indeks jarang hanya berisi entri untuk dokumen yang memiliki bidang yang diindeks, meskipun bidang indeks berisi nilai nol.
Dengan kata lain, indeks sparse tidak masalah dengan banyak dokumen yang semuanya memiliki null
nilai.
indeks jarang
Dari komentar:
Kesalahan Anda mengatakan bahwa kuncinya bernama mydb.users.$email_1
yang membuat saya curiga bahwa Anda memiliki indeks di kedua users.email
dan users.local.email
(Yang pertama sudah tua dan tidak terpakai saat ini). Menghapus bidang dari model Mongoose tidak memengaruhi database. Periksa dengan mydb.users.getIndexes()
jika ini masalahnya dan hapus secara manual indeks yang tidak diinginkan dengan mydb.users.dropIndex(<name>)
.