Anche io ho appena avuto questo problema. Volevo che un valore fosse nullo o univoco. Quindi, ho impostato entrambi unique
e il sparse
bandiere:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
E mi sono assicurato che il database avesse effettivamente creato l'indice correttamente con db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Quindi, questo non lo stesso del problema qui:mongo _id field duplicate key error )
Il mio errore è stato impostare il default
valore a null
. In un certo senso, Mongoose conta un esplicito null
come valore che deve essere unico. Se il campo non è mai definito (o undefined
) quindi non viene imposto di essere univoco.
email: {type: String, trim: true, unique: true, sparse: true},
Quindi, se anche tu stai riscontrando questo problema, assicurati di non impostare i valori predefiniti e assicurati di non impostare i valori su null
in qualsiasi altra parte del tuo codice. Invece, se hai bisogno di impostarlo in modo esplicito, impostalo su undefined
(o un valore univoco).