sql >> Database >  >> NoSQL >> MongoDB

Mongodb unieke schaarse index

Ik had dit probleem net ook. Ik wilde dat een waarde nul of uniek zou zijn. Dus ik heb zowel de unique en de sparse vlaggen:

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

En ik zorgde ervoor dat de database de index correct had gemaakt met db.users.getIndexes();

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

(Dit is dus niet hetzelfde als het probleem hier:mongo _id veld dubbele sleutelfout )

Mijn fout was het instellen van de default waarde naar null . In zekere zin telt Mongoose een expliciete null als een waarde die uniek moet zijn. Als het veld nooit is gedefinieerd (of undefined ) dan wordt het niet afgedwongen om uniek te zijn.

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

Dus als u dit probleem ook ondervindt, zorg er dan voor dat u geen standaardwaarden instelt en zorg ervoor dat u de waarden niet instelt op null ergens anders in uw code. In plaats daarvan, als u het expliciet moet instellen, stelt u het in op undefined (of een unieke waarde).




  1. Mongodb multi-geneste array zoeken

  2. Onverwachte Mongo-exitcode 100. Opnieuw opstarten

  3. Converteer MongoDB BsonDocument naar geldige JSON in C#

  4. Spring Boot met Session/Redis-serialisatiefout met slechte Active Directory Ldap-referenties