sql >> Database >  >> NoSQL >> MongoDB

E11000 dubbele sleutelfoutindex in mongodb mangoest

De foutmelding zegt dat er al een record is met null als de e-mail. Met andere woorden, u heeft al een gebruiker zonder e-mailadres.

De relevante documentatie hiervoor:

Als een document geen waarde heeft voor het geïndexeerde veld in een unieke index, zal de index een null-waarde voor dit document opslaan. Vanwege de unieke beperking staat MongoDB slechts één document toe zonder het geïndexeerde veld. Als er meer dan één document is zonder een waarde voor het geïndexeerde veld of als het geïndexeerde veld ontbreekt, mislukt de opbouw van de index met een dubbele sleutelfout.

U kunt de unieke beperking combineren met de schaarse index om deze null-waarden uit de unieke index te filteren en de fout te voorkomen.

unieke indexen

Spaarzame indexen bevatten alleen vermeldingen voor documenten die het geïndexeerde veld hebben, zelfs als het indexveld een null-waarde bevat.

Met andere woorden, een schaarse index is oké met meerdere documenten die allemaal null . hebben waarden.

schaarse indexen

Uit opmerkingen:

Je fout zegt dat de sleutel mydb.users.$email_1 heet waardoor ik vermoed dat je een index hebt op beide users.email en users.local.email (De voormalige is op dit moment oud en ongebruikt). Het verwijderen van een veld uit een Mongoose-model heeft geen invloed op de database. Controleer met mydb.users.getIndexes() als dit het geval is, verwijder dan handmatig de ongewenste index met mydb.users.dropIndex(<name>) .



  1. Wat is het verschil tussen de HSET- en HMSET-methode in de redis-database?

  2. Nu beschikbaar:volledig gehoste MongoDB-instanties op AWS

  3. MongoDB geaggregeerde query met behulp van PHP-stuurprogramma

  4. Mongodb - Verschil tussen het uitvoeren van mongo- en mongod-databases