И аз имах този проблем. Исках една стойност или да е нула, или да е уникална. И така, зададох и двете unique
и sparse
флагове:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
И се уверих, че базата данни действително е създала индекса правилно с db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Така че това е не същият като проблема тук:монго _id поле грешка при дублиран ключ )
Грешката ми беше, че зададох default
стойност на null
. В известен смисъл Mongoose отчита изрично null
като стойност, която трябва да бъде уникална. Ако полето никога не е дефинирано (или undefined
), тогава не се налага да бъде уникален.
email: {type: String, trim: true, unique: true, sparse: true},
Така че, ако и вие имате този проблем, уверете се, че не задавате стойности по подразбиране и се уверете, че не задавате стойностите на null
където и да е другаде във вашия код. Вместо това, ако трябва да го зададете изрично, задайте го на undefined
(или уникална стойност).