Wie indexiere ich einen Benutzernamen in Mongo mit case-insensitiv?

8

Ich programmiere einen Webservice, in dem Benutzer einen Benutzernamen auswählen können, bei dem die Groß- und Kleinschreibung nicht beachtet werden muss. Ich möchte ihnen jedoch erlauben, eine Groß- und Kleinschreibung ihres Benutzernamens zu beachten.

Was ist der beste Weg, beim Einfügen zu überprüfen, dass der Benutzername keine Groß- und Kleinschreibung unterscheidet? Ich sehe derzeit 2 Möglichkeiten, dies zu tun:

  • Speicherung sowohl einer Klein- als auch einer anderen Version mit dem vom Benutzer eingegebenen Fall und Indexierung nur der Kleinschreibung
  • speichert nur die Version mit dem vom Benutzer eingegebenen Fall und Kleinbuchstaben für den Vergleich, was den Zweck des Indexes, wie ich annehme,
  • zunichte macht

Gibt es einen besseren Weg?

    
stanm87 08.08.2012, 13:38
quelle

4 Antworten

9

Das Speichern des ursprünglich eingegebenen Benutzernamens und einer kanonischen Version (Kleinbuchstaben für Ihre App) ist völlig in Ordnung. Stellen Sie nur sicher, dass das kanonische Feld in Ihrem Modell aktualisiert wird, wenn der Benutzername gesetzt ist, und überprüfen Sie, ob der spezifische Index des kanonischen Felds Einschränkungen enthält.

Ein anderes Szenario, in dem diese Lösung (ursprüngliches und kanonisches Feld) sinnvoll ist, sind Artikel, in denen derselbe Titel wiederverwendet werden kann, aber der Slug (für URLs) eindeutig sein muss.

    
jmikola 08.08.2012 14:43
quelle
3

MongoDB 3.4 enthält jetzt die Möglichkeit, einen Index ohne Beachtung der Groß- / Kleinschreibung zu erstellen. Es wird erstellt, indem eine Sortierung mit der Stärke 2 angegeben wird.

Wahrscheinlich ist es am einfachsten, eine Sortierung für die Datenbank selbst vorzunehmen. Dann erben alle Abfragen diese Kollatierung und verwenden sie:

%Vor%

Oder Sie können dies auf Indexbasis tun:

%Vor%

Und benutze es so:

%Vor%

Weitere Informationen: Ссылка

    
user3413723 01.12.2016 15:41
quelle
1

Es sieht so aus, als ob mongodb die Groß- / Kleinschreibung-abhängige Indizierung von der Version 3.4 (die bald veröffentlicht wird) unterstützt. Sehen Sie sich dieses Ticket und die Dokumentation von Kollationierung .

In dem Beispiel, das wir vom erwähnten Ticket erhalten haben, sehen wir, dass die Verwendung von collation mit einer Stärke von 2 in createIndex und find eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchführt:

%Vor%     
Ruben 07.11.2016 19:41
quelle
-1

Die Indizierung hat damit nichts zu tun, die Indizierung dient dazu, das Suchen (Suchen) schneller zu machen.

%Vor%

Siehe Ссылка

    
Germann Arlington 08.08.2012 14:04
quelle

Tags und Links