MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Index d'erreur de clé en double E11000 dans mongodb mongoose

Le message d'erreur indique qu'il existe déjà un enregistrement avec null comme e-mail. En d'autres termes, vous avez déjà un utilisateur sans adresse e-mail.

La documentation pertinente pour cela :

Si un document n'a pas de valeur pour le champ indexé dans un index unique, l'index stockera une valeur nulle pour ce document. En raison de la contrainte unique, MongoDB n'autorisera qu'un seul document dépourvu du champ indexé. S'il y a plus d'un document sans valeur pour le champ indexé ou s'il manque le champ indexé, la construction de l'index échouera avec une erreur de clé en double.

Vous pouvez combiner la contrainte unique avec l'index fragmenté pour filtrer ces valeurs nulles de l'index unique et éviter l'erreur.

index uniques

Les index fragmentés ne contiennent que des entrées pour les documents qui ont le champ indexé, même si le champ d'index contient une valeur nulle.

En d'autres termes, un index clairsemé est acceptable avec plusieurs documents ayant tous null valeurs.

index clairs

À partir des commentaires :

Votre erreur indique que la clé est nommée mydb.users.$email_1 ce qui me fait soupçonner que vous avez un index sur les deux users.email et users.local.email (Le premier étant ancien et inutilisé pour le moment). La suppression d'un champ d'un modèle Mongoose n'affecte pas la base de données. Vérifiez avec mydb.users.getIndexes() si tel est le cas et supprimez manuellement l'index indésirable avec mydb.users.dropIndex(<name>) .