Heim > Artikel > Web-Frontend > Wie aktiviere ich die Sortierung ohne Berücksichtigung der Groß-/Kleinschreibung in Cloud Firestore?
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“.
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 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.
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) && Object.prototype.toString.call(doc[field]) === "[object String]") { doc[field.concat("_insensitive")] = 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!