Cloud Firestore exige que les requêtes et les filtres soient sensibles à la casse, ce qui oblige les développeurs à rechercher des approches alternatives pour le tri insensible à la casse . Pour résoudre ce problème, une technique populaire consiste à créer des champs en double tout en conservant des copies des données insensibles à la casse.
En créant un champ secondaire avec une version minuscule du Les données originales, le tri et le filtrage peuvent être effectués sur la base de ce champ insensible à la casse. Par exemple, un champ appelé myData pourrait avoir un champ correspondant myData_insensitive avec toutes les valeurs converties en minuscules.
DocA: -> myData = 'AAA' -> myData_insensitive = 'aaa' DocB: -> myData = 'aaa' -> myData_insensitive = 'aaa' DocC: -> myData = 'BBB' -> myData_insensitive = 'bbb' DocD: -> myData = 'bbb' -> myData_insensitive = 'bbb'
Le pliage de la casse est recommandé pour la prise en charge d'Unicode, car il gère la normalisation des caractères complexes et le tri insensible à la casse. L'extrait JavaScript suivant fournit un exemple de la façon d'implémenter la casse :
<code class="javascript">caseFoldNormalize = function (s){ return s.normalize('NFKC').toLowerCase().toUpperCase().toLowerCase() };</code>
Cet extrait de code montre comment créer un document Firestore avec des champs insensibles à la casse :
<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>
Cela donnera lieu à un document avec des champs sensibles à la casse et insensibles à la casse :
<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>
N'oubliez pas que même si cette technique offre une solution pour le tri insensible à la casse dans Firestore, elle nécessite un espace de stockage supplémentaire et entraîne des frais de traitement pour chaque mise à jour de document. Comme pour toute solution, réfléchissez aux compromis et choisissez l’approche qui correspond le mieux aux exigences de votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!