Thông báo lỗi cho biết rằng đã có một bản ghi với null
như email. Nói cách khác, bạn đã có một người dùng không có địa chỉ email.
Các tài liệu liên quan cho việc này:
Nếu tài liệu không có giá trị cho trường được lập chỉ mục trong chỉ mục duy nhất, chỉ mục sẽ lưu trữ giá trị rỗng cho tài liệu này. Do ràng buộc duy nhất, MongoDB sẽ chỉ cho phép một tài liệu thiếu trường được lập chỉ mục. Nếu có nhiều tài liệu không có giá trị cho trường được lập chỉ mục hoặc thiếu trường được lập chỉ mục, quá trình tạo chỉ mục sẽ không thành công với lỗi khóa trùng lặp.
Bạn có thể kết hợp ràng buộc duy nhất với chỉ mục thưa thớt để lọc các giá trị rỗng này khỏi chỉ mục duy nhất và tránh lỗi.
chỉ mục duy nhất
Chỉ mục thưa thớt chỉ chứa các mục nhập cho tài liệu có trường được lập chỉ mục, ngay cả khi trường chỉ mục chứa giá trị rỗng.
Nói cách khác, một chỉ mục thưa thớt là ok với nhiều tài liệu đều có null
giá trị.
chỉ mục thưa thớt
Từ nhận xét:
Lỗi của bạn cho biết rằng khóa được đặt tên là mydb.users.$email_1
điều này khiến tôi nghi ngờ rằng bạn có chỉ mục trên cả users.email
và users.local.email
(Cái cũ và không được sử dụng ở thời điểm hiện tại). Xóa trường khỏi mô hình Mongoose không ảnh hưởng đến cơ sở dữ liệu. Kiểm tra bằng mydb.users.getIndexes()
nếu đúng như vậy và xóa chỉ mục không mong muốn theo cách thủ công bằng mydb.users.dropIndex(<name>)
.