MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

E11000 indice di errore chiave duplicata in mongodb mongoose

Il messaggio di errore dice che esiste già un record con null come l'e-mail. In altre parole, hai già un utente senza un indirizzo email.

La documentazione pertinente per questo:

Se un documento non ha un valore per il campo indicizzato in un indice univoco, l'indice memorizzerà un valore nullo per questo documento. A causa del vincolo univoco, MongoDB consentirà solo un documento a cui manca il campo indicizzato. Se è presente più di un documento senza un valore per il campo indicizzato o manca il campo indicizzato, la compilazione dell'indice avrà esito negativo con un errore di chiave duplicata.

Puoi combinare il vincolo univoco con l'indice sparso per filtrare questi valori null dall'indice univoco ed evitare l'errore.

indici univoci

Gli indici sparsi contengono solo voci per documenti che hanno il campo indicizzato, anche se il campo indice contiene un valore nullo.

In altre parole, un indice sparso va bene con più documenti che hanno tutti null valori.

indici sparsi

Dai commenti:

Il tuo errore dice che la chiave si chiama mydb.users.$email_1 il che mi fa sospettare che tu abbia un indice su entrambi users.email e users.local.email (Il primo è vecchio e inutilizzato al momento). La rimozione di un campo da un modello Mongoose non influisce sul database. Verifica con mydb.users.getIndexes() in tal caso, rimuovere manualmente l'indice indesiderato con mydb.users.dropIndex(<name>) .