Je viens d'avoir ce problème aussi. Je voulais qu'une valeur soit nulle ou unique. Donc, j'ai défini à la fois le unique
et le sparse
drapeaux :
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
Et, je me suis assuré que la base de données avait bien créé l'index correctement avec db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Donc, ce n'est pas le même que le problème ici :mongo _id field duplicate key error )
Mon erreur était de définir le default
valeur à null
. Dans un certain sens, Mongoose compte un null
explicite comme une valeur qui doit être unique. Si le champ n'est jamais défini (ou undefined
) alors il n'est pas forcé d'être unique.
email: {type: String, trim: true, unique: true, sparse: true},
Donc, si vous rencontrez également ce problème, assurez-vous que vous ne définissez pas les valeurs par défaut et que vous ne définissez pas les valeurs sur null
n'importe où ailleurs dans votre code non plus. Au lieu de cela, si vous devez le définir explicitement, définissez-le sur undefined
(ou une valeur unique).