Fejlmeddelelsen siger, at der allerede er en post med null
som e-mailen. Du har med andre ord allerede en bruger uden en e-mailadresse.
Den relevante dokumentation herfor:
Hvis et dokument ikke har en værdi for det indekserede felt i et unikt indeks, vil indekset gemme en nulværdi for dette dokument. På grund af den unikke begrænsning vil MongoDB kun tillade ét dokument, der mangler det indekserede felt. Hvis der er mere end ét dokument uden en værdi for det indekserede felt eller mangler det indekserede felt, vil indeksopbygningen mislykkes med en dubletnøglefejl.
Du kan kombinere den unikke begrænsning med det sparsomme indeks for at filtrere disse nulværdier fra det unikke indeks og undgå fejlen.
unikke indekser
Sparsomme indekser indeholder kun poster for dokumenter, der har det indekserede felt, selvom indeksfeltet indeholder en nulværdi.
Med andre ord er et sparsomt indeks ok med flere dokumenter, der alle har null
værdier.
sparsomme indekser
Fra kommentarer:
Din fejl siger, at nøglen hedder mydb.users.$email_1
hvilket får mig til at mistænke, at du har et indeks på begge users.email
og users.local.email
(Den førstnævnte er gammel og ubrugt i øjeblikket). Fjernelse af et felt fra en Mongoose-model påvirker ikke databasen. Tjek med mydb.users.getIndexes()
hvis dette er tilfældet, og fjern manuelt det uønskede indeks med mydb.users.dropIndex(<name>)
.