MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb уникален рядък индекс

И аз имах този проблем. Исках една стойност или да е нула, или да е уникална. И така, зададох и двете unique и sparse флагове:

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

И се уверих, че базата данни действително е създала индекса правилно с db.users.getIndexes();

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

(Така че това е не същият като проблема тук:монго _id поле грешка при дублиран ключ )

Грешката ми беше, че зададох default стойност на null . В известен смисъл Mongoose отчита изрично null като стойност, която трябва да бъде уникална. Ако полето никога не е дефинирано (или undefined ), тогава не се налага да бъде уникален.

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

Така че, ако и вие имате този проблем, уверете се, че не задавате стойности по подразбиране и се уверете, че не задавате стойностите на null където и да е другаде във вашия код. Вместо това, ако трябва да го зададете изрично, задайте го на undefined (или уникална стойност).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Критерии/обобщаване:търсене на всички пълни документи, чието поле за масив има елемент с последно зададен статус

  2. дата в MongoDB:при вмъкване на обекти Date в база данни Mongo, датата става 1 ден по-рано от себе си

  3. Как условно да проектираме полета по време на агрегат в mongodb

  4. Ефективно запитване към MongoDB (чрез pymongo) при нечувствителни към главни и малки букви

  5. Mongoose с ReplicaSet на Atlas