Chybová zpráva říká, že již existuje záznam s null
jako e-mail. Jinými slovy, již máte uživatele bez e-mailové adresy.
Příslušná dokumentace:
Pokud dokument nemá hodnotu pro indexované pole v jedinečném indexu, index uloží pro tento dokument hodnotu null. Kvůli jedinečnému omezení MongoDB povolí pouze jeden dokument, který postrádá indexované pole. Pokud existuje více než jeden dokument bez hodnoty pro indexované pole nebo pokud indexované pole chybí, sestavení indexu se nezdaří s chybou duplicitního klíče.
Můžete zkombinovat jedinečné omezení s řídkým indexem a odfiltrovat tyto hodnoty null z jedinečného indexu a předejít tak chybě.
jedinečné indexy
Řídké indexy obsahují pouze položky pro dokumenty, které mají indexované pole, i když pole indexu obsahuje hodnotu null.
Jinými slovy, řídký index je v pořádku s více dokumenty, které mají všechny null
hodnoty.
řídké indexy
Z komentářů:
Vaše chyba říká, že klíč se jmenuje mydb.users.$email_1
z čehož mám podezření, že máte index na obou users.email
a users.local.email
(První je starý a v tuto chvíli nevyužívaný). Odebrání pole z modelu Mongoose neovlivní databázi. Zkontrolujte pomocí mydb.users.getIndexes()
v takovém případě ručně odstraňte nežádoucí index pomocí mydb.users.dropIndex(<name>)
.