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