Ik had dit probleem net ook. Ik wilde dat een waarde nul of uniek zou zijn. Dus ik heb zowel de unique
en de sparse
vlaggen:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
En ik zorgde ervoor dat de database de index correct had gemaakt met db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Dit is dus niet hetzelfde als het probleem hier:mongo _id veld dubbele sleutelfout )
Mijn fout was het instellen van de default
waarde naar null
. In zekere zin telt Mongoose een expliciete null
als een waarde die uniek moet zijn. Als het veld nooit is gedefinieerd (of undefined
) dan wordt het niet afgedwongen om uniek te zijn.
email: {type: String, trim: true, unique: true, sparse: true},
Dus als u dit probleem ook ondervindt, zorg er dan voor dat u geen standaardwaarden instelt en zorg ervoor dat u de waarden niet instelt op null
ergens anders in uw code. In plaats daarvan, als u het expliciet moet instellen, stelt u het in op undefined
(of een unieke waarde).