MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Indice sparso univoco di Mongodb

Anche io ho appena avuto questo problema. Volevo che un valore fosse nullo o univoco. Quindi, ho impostato entrambi unique e il sparse bandiere:

var UserSchema = new Schema({
  // ...
  email: {type: String, default: null, trim: true, unique: true, sparse: true},
  // ...
});

E mi sono assicurato che il database avesse effettivamente creato l'indice correttamente con db.users.getIndexes();

{
  "v" : 1,
  "key" : {
    "email" : 1
  },
  "unique" : true,
  "ns" : "test.users",
  "name" : "email_1",
  "sparse" : true,
  "background" : true,
  "safe" : null
},

(Quindi, questo non lo stesso del problema qui:mongo _id field duplicate key error )

Il mio errore è stato impostare il default valore a null . In un certo senso, Mongoose conta un esplicito null come valore che deve essere unico. Se il campo non è mai definito (o undefined ) quindi non viene imposto di essere univoco.

email: {type: String, trim: true, unique: true, sparse: true},

Quindi, se anche tu stai riscontrando questo problema, assicurati di non impostare i valori predefiniti e assicurati di non impostare i valori su null in qualsiasi altra parte del tuo codice. Invece, se hai bisogno di impostarlo in modo esplicito, impostalo su undefined (o un valore univoco).