sql >> Base de Datos >  >> NoSQL >> MongoDB

Índice disperso único de Mongodb

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