Acabei de ter esse problema também. Eu queria que um valor fosse nulo ou único. Então, eu defino tanto o
unique
e o sparse
bandeiras:var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
E, eu me certifiquei de que o banco de dados realmente criou o índice corretamente com
db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Então, isso não o mesmo que o problema aqui:erro de chave duplicada do campo mongo _id )
Meu erro foi definir o
default
valor para null
. De certa forma, o Mongoose conta um null
explícito como um valor que deve ser único. Se o campo nunca for definido (ou undefined
) então não é obrigatório que seja único. email: {type: String, trim: true, unique: true, sparse: true},
Portanto, se você também estiver tendo esse problema, verifique se não está definindo valores padrão e não definindo os valores como
null
em qualquer outro lugar do seu código. Em vez disso, se você precisar defini-lo explicitamente, defina-o como undefined
(ou um valor único).