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".
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'
Pertanyaan kini boleh dilaksanakan pada myData_insensitive, memastikan pengisihan tidak sensitif huruf. Walau bagaimanapun, data asal dipaparkan dengan mengekstrak nilai daripada myData.
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) && Object.prototype.toString.call(doc[field]) === "[object String]") { doc[field.concat("_insensitive")] = 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!