sql >> Base de Datos >  >> NoSQL >> MongoDB

E11000 índice de error de clave duplicada en mongodb mongoose

El mensaje de error dice que ya hay un registro con null como el correo electrónico. En otras palabras, ya tienes un usuario sin dirección de correo electrónico.

La documentación relevante para esto:

Si un documento no tiene un valor para el campo indexado en un índice único, el índice almacenará un valor nulo para este documento. Debido a la restricción única, MongoDB solo permitirá un documento que carezca del campo indexado. Si hay más de un documento sin un valor para el campo indexado o falta el campo indexado, la creación del índice fallará con un error de clave duplicada.

Puede combinar la restricción única con el índice disperso para filtrar estos valores nulos del índice único y evitar el error.

índices únicos

Los índices dispersos solo contienen entradas para documentos que tienen el campo indexado, incluso si el campo de índice contiene un valor nulo.

En otras palabras, un índice disperso está bien con varios documentos, todos con null valores.

índices dispersos

De los comentarios:

Su error dice que la clave se llama mydb.users.$email_1 lo que me hace sospechar que tiene un índice en ambos users.email y users.local.email (El primero siendo antiguo y sin uso en este momento). La eliminación de un campo de un modelo Mongoose no afecta a la base de datos. Verifique con mydb.users.getIndexes() si este es el caso y elimine manualmente el índice no deseado con mydb.users.dropIndex(<name>) .