MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Índice de erro de chave duplicada E11000 no mongodb mongoose


A mensagem de erro está dizendo que já existe um registro com null como o e-mail. Em outras palavras, você já tem um usuário sem endereço de e-mail.

A documentação relevante para isso:

Se um documento não tiver um valor para o campo indexado em um índice exclusivo, o índice armazenará um valor nulo para esse documento. Por causa da restrição exclusiva, o MongoDB permitirá apenas um documento que não tenha o campo indexado. Se houver mais de um documento sem um valor para o campo indexado ou estiver faltando o campo indexado, a criação do índice falhará com um erro de chave duplicada.

Você pode combinar a restrição exclusiva com o índice esparso para filtrar esses valores nulos do índice exclusivo e evitar o erro.

índices únicos

Índices esparsos contêm apenas entradas para documentos que possuem o campo indexado, mesmo que o campo de índice contenha um valor nulo.

Em outras palavras, um índice esparso é aceitável com vários documentos com null valores.

índices esparsos

Dos comentários:

Seu erro diz que a chave se chama mydb.users.$email_1 o que me faz suspeitar que você tenha um índice em ambos users.email e users.local.email (O primeiro sendo antigo e sem uso no momento). A remoção de um campo de um modelo Mongoose não afeta o banco de dados. Verifique com mydb.users.getIndexes() se este for o caso e remova manualmente o índice indesejado com mydb.users.dropIndex(<name>) .