sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb unikt sparsomt indeks

Jeg havde også lige dette problem. Jeg ønskede, at en værdi enten skulle være nul eller være unik. Så jeg indstillede både unique og den sparse flag:

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

Og jeg sørgede for, at databasen faktisk havde oprettet indekset korrekt med db.users.getIndexes();

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

(Så dette er ikke det samme som problemet her:mongo _id field duplicate key error )

Min fejl var at indstille default værdi til null . I en eller anden forstand tæller Mongoose en eksplicit null som en værdi, der skal være unik. Hvis feltet aldrig er defineret (eller undefined ) så håndhæves den ikke til at være unik.

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

Så hvis du også har dette problem, skal du sørge for, at du ikke indstiller standardværdier, og sørg for, at du ikke indstiller værdierne til null et andet sted i din kode. Hvis du i stedet skal indstille det eksplicit, skal du indstille det til undefined (eller en unik værdi).




  1. hvordan opdaterer man en Mongo.db-samling i meteor.js?

  2. MongoDB $toObjectId

  3. Sådan cachelagres store objekter ved hjælp af Redis-cache

  4. C# MongoDB:Hvordan kortlægger man et domæneobjekt korrekt?