Acabo de tener este problema también. Quería que un valor fuera nulo o único. Entonces, configuré tanto el unique
y el sparse
banderas:
var UserSchema = new Schema({
// ...
email: {type: String, default: null, trim: true, unique: true, sparse: true},
// ...
});
Y me aseguré de que la base de datos hubiera creado el índice correctamente con db.users.getIndexes();
{
"v" : 1,
"key" : {
"email" : 1
},
"unique" : true,
"ns" : "test.users",
"name" : "email_1",
"sparse" : true,
"background" : true,
"safe" : null
},
(Entonces, esto no lo mismo que el problema aquí:error de clave duplicada del campo _id de mongo )
Mi error fue establecer el default
valor a null
. En cierto sentido, Mongoose cuenta un null
explícito como un valor que debe ser único. Si el campo nunca está definido (o undefined
) entonces no se exige que sea único.
email: {type: String, trim: true, unique: true, sparse: true},
Por lo tanto, si también tiene este problema, asegúrese de no establecer valores predeterminados y asegúrese de no establecer los valores en null
en cualquier otro lugar de su código tampoco. En cambio, si necesita configurarlo explícitamente, configúrelo en undefined
(o un valor único).