MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Índice esparso exclusivo do Mongodb


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).