Saya juga baru saja mengalami masalah ini. Saya ingin nilai menjadi nol atau unik. Jadi, saya mengatur keduanya unique
dan sparse
bendera:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
Dan, saya memastikan bahwa database telah benar-benar membuat indeks dengan benar dengan db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Jadi, ini bukan sama dengan masalah di sini:kesalahan kunci duplikat bidang mongo _id )
Kesalahan saya adalah mengatur default
nilai menjadi null
. Dalam beberapa hal, Mongoose menghitung null
explicit eksplisit sebagai nilai yang harus unik. Jika bidang tidak pernah ditentukan (atau undefined
) maka tidak dipaksa untuk menjadi unik.
email: {type: String, trim: true, unique: true, sparse: true},
Jadi, jika Anda juga mengalami masalah ini, pastikan Anda tidak menyetel nilai default, dan pastikan Anda tidak menyetel nilai ke null
di tempat lain dalam kode Anda. Sebaliknya, jika Anda perlu menyetelnya secara eksplisit, setel ke undefined
(atau nilai unik).