Heim  >  Artikel  >  Web-Frontend  >  Wie aktiviere ich die Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung in Cloud Firestore?

Wie aktiviere ich die Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung in Cloud Firestore?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-22 08:57:02850Durchsuche

How to Enable Case Insensitive Sorting in Cloud Firestore?

Groß- und Kleinschreibung in Cloud Firestore mithilfe einer Abfrage sortieren

Problembeschreibung

Die OrderBy-Abfrage von Cloud Firestore sortiert Daten unter Berücksichtigung der Groß-/Kleinschreibung, was zu Diskrepanzen zwischen erwarteten und erwarteten Daten führt tatsächliches Sortierverhalten. Beispielsweise werden als „AAA“ und „aaa“ gespeicherte Daten nach „AAA“, „BBB“, „aaa“ und „bbb“ sortiert, wobei die gewünschte Reihenfolge „AAA“, „aaa“, „BBB“ lautet. und „bbb“.

Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung lösen

Cloud Firestore bietet kein integriertes Flag für die Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung. Die einzig wirksame Lösung besteht darin, das sensible Feld zweimal im Dokument zu speichern. Das erste Feld, myData, speichert die Originaldaten unverändert. Das zweite Feld, myData_insensitive, speichert eine Version der Daten, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird.

DocA:
-> myData = 'AAA'
-> myData_insensitive = 'AAA'

DocB:
-> myData = 'aaa'
-> myData_insensitive = 'AAA'

DocC:
-> myData = 'BBB'
-> myData_insensitive = 'BBB'

DocD:
-> myData = 'bbb'
-> myData_insensitive = 'BBB'

Abfragen und Anzeigen von Daten

Abfragen können jetzt auf myData_insensitive ausgeführt werden, wodurch eine Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung sichergestellt wird. Die Originaldaten werden jedoch angezeigt, indem der Wert aus myData extrahiert wird.

Unicode und Internationalisierung

Die Groß-/Kleinschreibung wird beim Umgang mit Unicode-Zeichen komplexer. Die Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung kann je nach menschlicher Sprache unterschiedlich sein und erfordert zusätzliche Verarbeitung, um konsistente Ergebnisse sicherzustellen. Ein Ansatz besteht darin, die Daten mit caseFoldNormalize() zu normalisieren und das Ergebnis in einem separaten Feld zu speichern:

<code class="javascript">caseFoldNormalize = function (s){
  return s.normalize('NFKC').toLowerCase().toUpperCase().toLowerCase()
};
caseFoldDoc = function(doc, field_options) {
  // Case fold desired document fields
  if (field_options != null) {
    for (var field in field_options) {
      if (field_options.hasOwnProperty(field)) {
        switch(field_options[field]) {
          case 'case_fold':
            if (doc.hasOwnProperty(field) &amp;&amp; Object.prototype.toString.call(doc[field]) === &quot;[object String]&quot;) {
              doc[field.concat(&quot;_insensitive&quot;)] = caseFoldNormalize(doc[field])
            }
            break;
        }
      }
    }
  }
  return doc;
}</code>

Obwohl es sich um eine wirksame Problemumgehung handelt, ist es wichtig zu beachten, dass dieser Ansatz zusätzlichen Speicher- und Verarbeitungsaufwand mit sich bringt. Dies sollte bei der Implementierung in Produktionsanwendungen berücksichtigt werden.

Das obige ist der detaillierte Inhalt vonWie aktiviere ich die Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung in Cloud Firestore?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn