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).