Jeg havde også lige dette problem. Jeg ønskede, at en værdi enten skulle være nul eller være unik. Så jeg indstillede både unique
og den sparse
flag:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
Og jeg sørgede for, at databasen faktisk havde oprettet indekset korrekt med db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Så dette er ikke det samme som problemet her:mongo _id field duplicate key error )
Min fejl var at indstille default
værdi til null
. I en eller anden forstand tæller Mongoose en eksplicit null
som en værdi, der skal være unik. Hvis feltet aldrig er defineret (eller undefined
) så håndhæves den ikke til at være unik.
email: {type: String, trim: true, unique: true, sparse: true},
Så hvis du også har dette problem, skal du sørge for, at du ikke indstiller standardværdier, og sørg for, at du ikke indstiller værdierne til null
et andet sted i din kode. Hvis du i stedet skal indstille det eksplicit, skal du indstille det til undefined
(eller en unik værdi).