Bagaimana untuk Mendayakan Pengisihan Case Insensitive dalam Cloud Firestore?

Mary-Kate Olsen
Lepaskan: 2024-10-22 08:57:02
asal
849 orang telah melayarinya

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'
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan