sql >> Databáze >  >> NoSQL >> MongoDB

Jedinečný řídký index Mongodb

Právě jsem měl tento problém také. Chtěl jsem, aby hodnota byla buď nulová, nebo byla jedinečná. Takže jsem obě nastavil jako unique a sparse příznaky:

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

A ujistil jsem se, že databáze skutečně vytvořila index správně pomocí db.users.getIndexes();

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

(To tedy není stejný jako problém zde:chyba duplicitního klíče pole mongo _id )

Moje chyba byla, že jsem nastavil default hodnotu na null . V jistém smyslu Mongoose počítá explicitní null jako hodnotu, která musí být jedinečná. Pokud pole není nikdy definováno (nebo undefined ), pak není vynuceno, aby byl jedinečný.

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

Pokud tedy máte tento problém také, ujistěte se, že nenastavujete výchozí hodnoty, a ujistěte se, že nenastavujete hodnoty na null kdekoli jinde ve vašem kódu. Místo toho, pokud jej potřebujete nastavit explicitně, nastavte jej na undefined (nebo jedinečná hodnota).




  1. Vyloučit pole z výsledku v MongoDB monk

  2. MongoDB 3 Java zkontroluje, zda existuje kolekce

  3. Jak integruji MongoDB se Solr?

  4. Loopback:v blízkosti filtru v dílčím poli objektu