sql >> データベース >  >> NoSQL >> MongoDB

MongodbマングースのE11000重複キーエラーインデックス

    エラーメッセージは、nullのレコードがすでに存在することを示しています メールとして。つまり、メールアドレスを持たないユーザーがすでにいます。

    これに関連するドキュメント:

    ドキュメントに一意のインデックスのインデックス付きフィールドの値がない場合、インデックスはこのドキュメントのnull値を格納します。一意の制約があるため、MongoDBはインデックス付きフィールドがないドキュメントを1つだけ許可します。インデックス付きフィールドの値がないドキュメントが複数ある場合、またはインデックス付きフィールドがない場合、インデックスの作成は重複キーエラーで失敗します。

    一意性制約をスパースインデックスと組み合わせて、一意性インデックスからこれらのnull値をフィルタリングし、エラーを回避できます。

    一意のインデックス

    スパースインデックスには、インデックスフィールドにnull値が含まれている場合でも、インデックスフィールドを持つドキュメントのエントリのみが含まれます。

    つまり、スパースインデックスは、すべてnullを持つ複数のドキュメントで問題ありません。 値。

    スパースインデックス

    コメントから:

    エラーは、キーの名前がmydb.users.$email_1であることを示しています。 これにより、両方のusers.emailにインデックスがあるのではないかと思われます。 およびusers.local.email (前者は現在古く、使用されていません)。 Mongooseモデルからフィールドを削除しても、データベースには影響しません。 mydb.users.getIndexes()で確認してください この場合は、mydb.users.dropIndex(<name>)を使用して不要なインデックスを手動で削除してください 。



    1. MongoDBの属性との多対多の関係を表すための最良のモデル

    2. mongodbjavaドライバーで検索した後にカウント操作を呼び出す方法

    3. javascriptでISO日付オブジェクトを作成します

    4. マングースfindByIdAndUpdateが正しいモデルを返さない