Cloud Firestore : réaliser un tri insensible à la casse à l'aide de requêtes
Dans Cloud Firestore, le tri des données à l'aide de la fonction OrderBy() est sensible à la casse , ce qui entraîne l'ordre des chaînes en fonction de leur casse, comme le montre l'exemple fourni. Cependant, il peut y avoir des scénarios dans lesquels le tri insensible à la casse est préféré.
Limitations du tri insensible à la casse
Firestore ne fournit pas de solution directe pour le tri insensible à la casse à l'aide de requêtes. En effet, les opérations de tri et de filtrage sont effectuées en interne par la base de données, qui opère sur les données réelles stockées.
Solution de contournement : stockage des champs en double
L'approche recommandée pour réaliser un tri insensible à la casse consiste à stocker les données deux fois :
Par exemple, considérons un champ nommé "myData" avec valeurs « AAA » et « aaa ». Pour réaliser un tri insensible à la casse, créez un champ supplémentaire « myData_insensitive » et stockez les valeurs au format « AAA » pour les deux.
Interrogation et affichage des données
Lors de l'exécution de requêtes et tri, précisez le champ "myData_insensitive". Cela garantit que la commande sera basée sur la version des données qui ne respecte pas la casse. Cependant, lors de l'affichage des résultats, reportez-vous au champ "myData" d'origine pour maintenir l'exactitude des données.
Considérations Unicode
La normalisation de la casse est essentielle lors de la mise en œuvre d'un tri insensible à la casse pour gérer correctement les caractères Unicode. Cela implique de convertir les caractères dans un format normalisé, garantissant un tri cohérent pour les chaînes contenant des accents et des caractères spéciaux. Différentes approches peuvent être utilisées pour la normalisation, telles que le pliage de casse.
Exemple d'implémentation
Le code JavaScript suivant montre comment réaliser un tri insensible à la casse à l'aide de champs en double :
<code class="javascript">firestore.collection("cities").where("myData_insensitive", ">=", "AAA").where("myData_insensitive", "<=", "aaa").orderBy("myData_insensitive")</code>
Cette requête renverra "AAA" et "aaa" dans un ordre insensible à la casse.
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!