sql >> Databasteknik >  >> NoSQL >> MongoDB

E11000 duplicate key error index i mongodb mongoose

Felmeddelandet säger att det redan finns en post med null som e-post. Med andra ord, du har redan en användare utan e-postadress.

Relevant dokumentation för detta:

Om ett dokument inte har ett värde för det indexerade fältet i ett unikt index, kommer indexet att lagra ett nollvärde för detta dokument. På grund av den unika begränsningen tillåter MongoDB endast ett dokument som saknar det indexerade fältet. Om det finns mer än ett dokument utan ett värde för det indexerade fältet eller om det indexerade fältet saknas, kommer indexbygget att misslyckas med ett dubblettnyckelfel.

Du kan kombinera den unika begränsningen med det sparsamma indexet för att filtrera dessa nollvärden från det unika indexet och undvika felet.

unika index

Glesa index innehåller endast poster för dokument som har det indexerade fältet, även om indexfältet innehåller ett nollvärde.

Med andra ord är ett sparsamt index ok med flera dokument som alla har null värden.

glesa index

Från kommentarer:

Ditt fel säger att nyckeln heter mydb.users.$email_1 vilket får mig att misstänka att du har ett index på båda users.email och users.local.email (Den förra är gammal och oanvänd för tillfället). Att ta bort ett fält från en Mongoose-modell påverkar inte databasen. Kontrollera med mydb.users.getIndexes() om så är fallet och ta bort det oönskade indexet manuellt med mydb.users.dropIndex(<name>) .



  1. Hur kan jag lista alla samlingar i MongoDB-skalet?

  2. Introduktion till Apache HBase Snapshots, del 2:Deeper Dive

  3. Vad är den största skillnaden mellan Redis och Membase?

  4. Redis Support på sekundärt index