MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

E11000 Doppelter Schlüsselfehlerindex in Mongodb Mongoose

Die Fehlermeldung besagt, dass es bereits einen Datensatz mit null gibt als E-Mail. Mit anderen Worten, Sie haben bereits einen Benutzer ohne E-Mail-Adresse.

Die entsprechende Dokumentation dazu:

Wenn ein Dokument keinen Wert für das indizierte Feld in einem eindeutigen Index hat, speichert der Index einen Nullwert für dieses Dokument. Aufgrund der Eindeutigkeitsbeschränkung lässt MongoDB nur ein Dokument zu, dem das indizierte Feld fehlt. Wenn mehr als ein Dokument ohne Wert für das indizierte Feld vorhanden ist oder das indizierte Feld fehlt, schlägt die Indexerstellung mit einem Fehler wegen doppeltem Schlüssel fehl.

Sie können die Unique-Einschränkung mit dem Sparse-Index kombinieren, um diese Nullwerte aus dem Unique-Index zu filtern und den Fehler zu vermeiden.

eindeutige Indizes

Sparse-Indizes enthalten nur Einträge für Dokumente, die das indizierte Feld haben, selbst wenn das Indexfeld einen Nullwert enthält.

Mit anderen Worten, ein Sparse-Index ist in Ordnung, wenn mehrere Dokumente alle null haben Werte.

Sparse-Indizes

Aus Kommentaren:

Ihr Fehler besagt, dass der Schlüssel mydb.users.$email_1 heißt was mich vermuten lässt, dass Sie einen Index für beide users.email haben und users.local.email (Der erstere ist im Moment alt und unbenutzt). Das Entfernen eines Felds aus einem Mongoose-Modell wirkt sich nicht auf die Datenbank aus. Überprüfen Sie dies mit mydb.users.getIndexes() Wenn dies der Fall ist, entfernen Sie den unerwünschten Index manuell mit mydb.users.dropIndex(<name>) .