Съобщението за грешка казва, че вече има запис с null
като имейла. С други думи, вече имате потребител без имейл адрес.
Съответната документация за това:
Ако документът няма стойност за индексираното поле в уникален индекс, индексът ще съхранява нулева стойност за този документ. Поради уникалното ограничение, MongoDB ще разреши само един документ, който няма индексирано поле. Ако има повече от един документ без стойност за индексираното поле или липсва индексираното поле, изграждането на индекса ще се провали с грешка с дублиран ключ.
Можете да комбинирате уникалното ограничение с разредения индекс, за да филтрирате тези нулеви стойности от уникалния индекс и да избегнете грешката.
уникални индекси
Редките индекси съдържат само записи за документи, които имат индексирано поле, дори ако индексното поле съдържа нулева стойност.
С други думи, рядък индекс е добре с множество документи, всички с null
стойности.
редки индекси
От коментари:
Вашата грешка казва, че ключът е с име mydb.users.$email_1
което ме кара да подозирам, че имате индекс и на двата users.email
и users.local.email
(Първата е стара и неизползвана в момента). Премахването на поле от модел Mongoose не засяга базата данни. Проверете с mydb.users.getIndexes()
ако случаят е такъв и премахнете ръчно нежелания индекс с mydb.users.dropIndex(<name>)
.