エラーメッセージは、nullのレコードがすでに存在することを示しています メールとして。つまり、メールアドレスを持たないユーザーがすでにいます。
これに関連するドキュメント:
ドキュメントに一意のインデックスのインデックス付きフィールドの値がない場合、インデックスはこのドキュメントのnull値を格納します。一意の制約があるため、MongoDBはインデックス付きフィールドがないドキュメントを1つだけ許可します。インデックス付きフィールドの値がないドキュメントが複数ある場合、またはインデックス付きフィールドがない場合、インデックスの作成は重複キーエラーで失敗します。
一意性制約をスパースインデックスと組み合わせて、一意性インデックスからこれらのnull値をフィルタリングし、エラーを回避できます。
一意のインデックス
スパースインデックスには、インデックスフィールドにnull値が含まれている場合でも、インデックスフィールドを持つドキュメントのエントリのみが含まれます。
つまり、スパースインデックスは、すべてnullを持つ複数のドキュメントで問題ありません。 値。
スパースインデックス
コメントから:
エラーは、キーの名前がmydb.users.$email_1であることを示しています。 これにより、両方のusers.emailにインデックスがあるのではないかと思われます。 およびusers.local.email (前者は現在古く、使用されていません)。 Mongooseモデルからフィールドを削除しても、データベースには影響しません。 mydb.users.getIndexes()で確認してください この場合は、mydb.users.dropIndex(<name>)を使用して不要なインデックスを手動で削除してください 。