MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Unikalny indeks rzadki Mongodb

Po prostu miałem ten problem. Chciałem, aby wartość była null lub była unikalna. Tak więc ustawiłem oba unique i sparse flagi:

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

I upewniłem się, że baza danych faktycznie utworzyła indeks poprawnie za pomocą db.users.getIndexes();

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

(Więc to jest nie to samo, co problem tutaj:błąd zduplikowanego klucza pola mongo _id )

Moim błędem było ustawienie default wartość na null . W pewnym sensie Mongoose liczy jawnie null jako wartość, która musi być unikalna. Jeśli pole nigdy nie jest zdefiniowane (lub undefined ), to nie jest wymuszane, aby był unikalny.

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

Jeśli więc masz również ten problem, upewnij się, że nie ustawiasz wartości domyślnych i nie ustawiasz wartości na null gdziekolwiek indziej w kodzie. Zamiast tego, jeśli chcesz ustawić go jawnie, ustaw go na undefined (lub unikalną wartość).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB / Pymongo Query z Datetime

  2. Sprawdź, czy kolekcja MongoDB jest ograniczona sterownikiem .NET 2.0

  3. Problemy z uruchomieniem MongoDB w systemie Windows

  4. Obliczanie średniej z ostatnich 200 dni w agregacji MongoDB i NodeJS

  5. Używanie @Resource injection dla Mongo db, wewnątrz Web Bundle wewnątrz OSGI, pod Liberty Profile