Cloud Firestore で大文字と小文字を区別しない並べ替えを有効にする方法

Mary-Kate Olsen
リリース: 2024-10-22 08:57:02
オリジナル
849 人が閲覧しました

How to Enable Case Insensitive Sorting in Cloud Firestore?

クエリを使用した Cloud Firestore での大文字と小文字を区別しない並べ替え

問題の説明

Cloud Firestore の OrderBy クエリは大文字と小文字を区別してデータを並べ替えるため、予想されるデータと一致しない結果が発生します。実際のソート動作。たとえば、「AAA」および「aaa」として保存されているデータは、「AAA」、「BBB」、「aaa」、「bbb」のようにソートされますが、望ましい順序は「AAA」、「aaa」、「BBB」、

大文字と小文字を区別しない並べ替えの解決

Cloud Firestore には、大文字と小文字を区別しない並べ替え用の組み込みフラグが提供されていません。唯一の効果的な解決策は、文書内に機密フィールドを 2 回保存することです。最初のフィールド myData には、元のデータがそのまま保存されます。 2 番目のフィールド myData_insensitive には、大文字と小文字を区別しないバージョンのデータが保存されます。

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

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

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

DocD:
-> myData = 'bbb'
-> myData_insensitive = 'BBB'
ログイン後にコピー

データのクエリと表示

クエリを myData_insensitive で実行できるようになり、大文字と小文字を区別しない並べ替えが保証されます。ただし、元のデータは myData から値を抽出することによって表示されます。

Unicode と国際化

Unicode 文字を扱う場合、大文字と小文字の区別はより複雑になります。大文字と小文字を区別しない並べ替えは人間の言語によって異なる場合があるため、一貫した結果を保証するには追加の処理が必要になります。 1 つのアプローチは、caseFoldNormalize() を使用してデータを正規化し、その結果を別のフィールドに保存することです。

<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>
ログイン後にコピー

効果的な回避策ではありますが、このアプローチには追加のストレージと処理のオーバーヘッドがかかることに注意することが重要です。これは、実稼働アプリケーションに実装するときに考慮する必要があります。

以上がCloud Firestore で大文字と小文字を区別しない並べ替えを有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート