Jag hade precis det här problemet också. Jag ville att ett värde antingen skulle vara null eller vara unikt. Så jag ställer in både unique
och den sparse
flaggor:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
Och jag såg till att databasen faktiskt hade skapat indexet korrekt med db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Det här är alltså inte samma som problemet här:mongo _id field duplicate key error )
Mitt misstag var att ställa in default
värde till null
. I någon mening räknar Mongoose en explicit null
som ett värde som måste vara unikt. Om fältet aldrig är definierat (eller undefined
) så tvingas den inte vara unik.
email: {type: String, trim: true, unique: true, sparse: true},
Så om du också har det här problemet, se till att du inte ställer in standardvärden och se till att du inte ställer in värdena till null
någon annanstans i din kod heller. Istället, om du behöver ställa in det explicit, ställ in det på undefined
(eller ett unikt värde).