Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mendayakan Pengisihan Case Insensitive dalam Cloud Firestore?

Bagaimana untuk Mendayakan Pengisihan Case Insensitive dalam Cloud Firestore?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-22 08:57:02778semak imbas

How to Enable Case Insensitive Sorting in Cloud Firestore?

Isih Tidak Peka Huruf dalam Cloud Firestore Menggunakan Pertanyaan

Penerangan Masalah

Pesanan Cloud FirestoreBy pertanyaan mengisih data secara sensitif huruf besar, mengakibatkan percanggahan antara jangkaan dan tingkah laku pengasingan sebenar. Sebagai contoh, data yang disimpan sebagai "AAA" dan "aaa" diisih sebagai "AAA", "BBB", "aaa" dan "bbb", manakala tertib yang dikehendaki ialah "AAA", "aaa", "BBB", dan "bbb".

Menyelesaikan Pengisihan Tidak Peka Huruf Besar

Cloud Firestore tidak menyediakan bendera terbina dalam untuk pengisihan tidak peka huruf besar-besaran. Satu-satunya penyelesaian yang berkesan ialah menyimpan medan sensitif dua kali dalam dokumen. Medan pertama, myData, menyimpan data asal sebagaimana adanya. Medan kedua, myData_insensitive, menyimpan versi data yang tidak sensitif huruf besar dan kecil.

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

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

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

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

Menyoal dan Memaparkan Data

Pertanyaan kini boleh dilaksanakan pada myData_insensitive, memastikan pengisihan tidak sensitif huruf. Walau bagaimanapun, data asal dipaparkan dengan mengekstrak nilai daripada myData.

Unikod dan Pengantarabangsaan

Lipatan kes menjadi lebih kompleks apabila berurusan dengan aksara Unikod. Pengisihan tidak sensitif huruf besar boleh berbeza-beza merentas bahasa manusia, memerlukan pemprosesan tambahan untuk memastikan hasil yang konsisten. Satu pendekatan adalah untuk menormalkan data menggunakan caseFoldNormalize() dan menyimpan hasilnya dalam medan yang berasingan:

<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>

Walaupun merupakan penyelesaian yang berkesan, adalah penting untuk ambil perhatian bahawa pendekatan ini melibatkan penyimpanan tambahan dan overhed pemprosesan, yang perlu dipertimbangkan semasa melaksanakannya dalam aplikasi pengeluaran.

Atas ialah kandungan terperinci Bagaimana untuk Mendayakan Pengisihan Case Insensitive dalam Cloud Firestore?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn