ホームページ  >  記事  >  ウェブフロントエンド  >  Cloud Firestore で大文字と小文字を区別しない並べ替えを実現するにはどうすればよいですか?

Cloud Firestore で大文字と小文字を区別しない並べ替えを実現するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-22 08:52:02883ブラウズ

How Can I Achieve Case-Insensitive Sorting in Cloud Firestore?

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

Cloud Firestore ではクエリとフィルタの両方で大文字と小文字を区別する必要があるため、開発者は大文字と小文字を区別しない並べ替えの代替アプローチを探す必要があります。 。これに対処するために、一般的な手法として、データの大文字と小文字を区別しないコピーを維持しながら重複フィールドを作成する方法があります。

大文字と小文字を区別しないフィールドの作成

小文字バージョンの 2 番目のフィールドを作成することにより、元のデータでは、この大文字と小文字を区別しないフィールドに基づいて並べ替えとフィルター処理を実行できます。たとえば、myData というフィールドには、すべての値が小文字に変換された、対応する 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'

Unicode での大文字と小文字の折り曲げ

Unicode のサポートには、大文字と小文字の折り曲げが推奨されます。複雑な文字の正規化と大文字と小文字を区別しない並べ替えを処理します。次の JavaScript スニペットは、大文字と小文字の折りたたみを実装する方法の例を示しています。

<code class="javascript">caseFoldNormalize = function (s){
  return s.normalize('NFKC').toLowerCase().toUpperCase().toLowerCase()
};</code>

サンプル コード

このコード スニペットは、大文字と小文字を区別しないフィールドを含む Firestore ドキュメントを作成する方法を示しています。

<code class="javascript">var raw_document = {
  name: "Los Angeles",
  state: "CA",
  country: "USA",
  structure: 'Waſſerſchloß',
  message: 'quıt quit' // Notice the different i's
};

var field_options = {
  name: 'case_fold',
  country: 'case_fold',
  structure: 'case_fold',
  message: 'case_fold'
}

var firestore_document = caseFoldDoc(raw_document, field_options);

db.collection("cities").doc("LA").set(firestore_document).then(function() {
  console.log("Document successfully written!");
}).catch(function(error) {
  console.error("Error writing document: ", error);
});</code>

これにより、大文字と小文字を区別するフィールドと大文字と小文字を区別しないフィールドの両方を含むドキュメントが作成されます。

<code class="javascript">{ 
 "name": "Los Angeles", 
 "state": "CA", 
 "country": "USA", 
 "structure": "Waſſerſchloß", 
 "message": "quıt quit", 
 "name_casefold": "los angeles", 
 "country_casefold": "usa", 
 "structure_casefold": "wasserschloss", 
 "message_casefold": "quit quit"
}</code>

この手法は Firestore で大文字と小文字を区別しない並べ替えのソリューションを提供しますが、追加のストレージ容量が必要となり、ドキュメントを更新するたびに処理コストが発生します。他のソリューションと同様に、トレードオフを考慮して、アプリケーションの要件に最も適したアプローチを選択してください。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。