E11000 doppelte Schlüsselfehlerindex: MongoDb ungewöhnlicher Fehler

8

Ich habe eine einfache "Benutzer" -Sammlung, in der ich jetzt nur zwei Dokumente habe.

%Vor%

Wenn ich jetzt versuche, einen neuen Index mit {unique: true} im Feld email_id zu erstellen, beschwert mich mongodb mit "E11000 duplicate key error index: db.users. $ email_id dupschlüssel: {: 46}". Ich bekomme den gleichen Fehler, obwohl ich {dropDups: true} angegeben habe, aber ich denke nicht, dass dies der Fall ist, da beide Dokumente unterschiedliche E-Mail-IDs gespeichert haben.

Ich bin mir nicht sicher, was hier vor sich geht, irgendwelche Hinweise werden sehr geschätzt.

Bearbeiten: Vollansicht der Dokumente:

%Vor%

und

%Vor%

Es gibt ein paar weitere Felder wie "display_name", "registred_since" usw., die ich oben in der Anzeige weggelassen habe (ich glaube nicht, dass sie irgendeine Rolle in dem Fehler haben, wenn sie noch benötigt werden, kann ich wahrscheinlich fügen Sie hier die gesamten Dokumente ein)

Ich benutze erlang mongodb-Treiber für die Kommunikation mit meiner Mongo-Instanz. Alle Felder, die angezeigt werden können, werden als binäre Bytes gespeichert, deshalb sehen Sie eine solche seltsame email_id im Dokument.

Hinweis: Das binäre Byteformat wird nicht von meiner Codelogik erzwungen. Ich übergebe die Zeichenfolge email_id in meinen bson-Dokumenten, aber meine Daten werden immer als binäre Bytes angezeigt. (Wahrscheinlich, weil wie Erlang mongodb Treiber geschrieben wird, habe ich nicht wirklich untersucht, da meine find (), find_one () und andere Abfragen wie erwartet funktioniert auch mit Feldern als binäre Bytes gespeichert)

Bearbeiten: & gt; db.users.findOne ()

%Vor%     
Abhinav Singh 26.12.2011, 21:25
quelle

2 Antworten

5

Wenn MongoDB ein Array-Feld indiziert, indiziert es tatsächlich die einzelnen Elemente im Array. Dies dient dazu, Abfragen effizient zu unterstützen, die nach einem bestimmten Element eines Arrays suchen, wie zum Beispiel:

%Vor%

Da diese email_id (46) in beiden Dokumenten vorhanden ist, gibt es doppelte Schlüssel in Ihrem eindeutigen Index.

Ich bin nicht sicher, warum Sie diesen Fehler erhalten würden, wenn Sie dropDups: true set ... haben. Können Sie ein Codebeispiel zeigen, wie Sie createIndex aufrufen? Sie sollten auch dropDups: 1 ausprobieren, da MongoDB in diesem Kontext fälschlicherweise 1 und true anders behandelt (siehe Ссылка ).

    
dcrosta 27.12.2011, 22:52
quelle
0

Für andere, die dieses Problem haben, überprüfe deine Mongo-Version mit db.version() . Wenn Sie Mongo 3 ausführen und versuchen, dropDups zu verwenden, um Duplikate zu löschen, wird es fehlschlagen und Ihnen diesen Fehler geben.

    
Muhd 10.06.2015 19:59
quelle

Tags und Links