MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb eindeutiger Sparse-Index

Ich hatte dieses Problem auch gerade. Ich wollte, dass ein Wert entweder null oder eindeutig ist. Also habe ich sowohl den unique gesetzt und der sparse Flaggen:

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

Und ich habe mit db.users.getIndexes(); sichergestellt, dass die Datenbank den Index tatsächlich korrekt erstellt hat

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

(Das ist also nicht das gleiche wie das Problem hier:mongo _id Feld doppelter Schlüsselfehler )

Mein Fehler war das Setzen des default Wert auf null . In gewissem Sinne zählt Mongoose einen expliziten null als Wert, der eindeutig sein muss. Wenn das Feld nie definiert ist (oder undefined ), dann wird die Eindeutigkeit nicht erzwungen.

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

Wenn Sie also auch dieses Problem haben, stellen Sie sicher, dass Sie keine Standardwerte festlegen, und stellen Sie sicher, dass Sie die Werte nicht auf null setzen auch an keiner anderen Stelle in Ihrem Code. Wenn Sie es explizit setzen müssen, setzen Sie es stattdessen auf undefined (oder ein eindeutiger Wert).