MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Index clairsemé unique Mongodb

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