Právě jsem měl tento problém také. Chtěl jsem, aby hodnota byla buď nulová, nebo byla jedinečná. Takže jsem obě nastavil jako unique
a sparse
příznaky:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
A ujistil jsem se, že databáze skutečně vytvořila index správně pomocí db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(To tedy není stejný jako problém zde:chyba duplicitního klíče pole mongo _id )
Moje chyba byla, že jsem nastavil default
hodnotu na null
. V jistém smyslu Mongoose počítá explicitní null
jako hodnotu, která musí být jedinečná. Pokud pole není nikdy definováno (nebo undefined
), pak není vynuceno, aby byl jedinečný.
email: {type: String, trim: true, unique: true, sparse: true},
Pokud tedy máte tento problém také, ujistěte se, že nenastavujete výchozí hodnoty, a ujistěte se, že nenastavujete hodnoty na null
kdekoli jinde ve vašem kódu. Místo toho, pokud jej potřebujete nastavit explicitně, nastavte jej na undefined
(nebo jedinečná hodnota).