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>)
.