Po prostu miałem ten problem. Chciałem, aby wartość była null lub była unikalna. Tak więc ustawiłem oba unique
i sparse
flagi:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
I upewniłem się, że baza danych faktycznie utworzyła indeks poprawnie za pomocą db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Więc to jest nie to samo, co problem tutaj:błąd zduplikowanego klucza pola mongo _id )
Moim błędem było ustawienie default
wartość na null
. W pewnym sensie Mongoose liczy jawnie null
jako wartość, która musi być unikalna. Jeśli pole nigdy nie jest zdefiniowane (lub undefined
), to nie jest wymuszane, aby był unikalny.
email: {type: String, trim: true, unique: true, sparse: true},
Jeśli więc masz również ten problem, upewnij się, że nie ustawiasz wartości domyślnych i nie ustawiasz wartości na null
gdziekolwiek indziej w kodzie. Zamiast tego, jeśli chcesz ustawić go jawnie, ustaw go na undefined
(lub unikalną wartość).