Firestore 使用 Cloud Firestore 查询进行不区分大小写的排序
在 Cloud Firestore 中,数据排序本质上是区分大小写的。使用 OrderBy 方法根据指定字段按升序或降序对数据进行排序。但是,如果数据包含大小写变化,例如“AAA”和“aaa”,则返回的顺序可能不符合预期。
区分大小写排序的问题
默认情况下,Firestore 按以下顺序对数据进行排序:
AAA BBB aaa bbb
但是,期望可能是:
AAA aaa BBB bbb
解决方案:存储不区分大小写的数据
由于 Firestore 不提供内置标志来在排序过程中忽略大小写,因此实现不区分大小写排序的唯一方法是存储包含不区分大小写版本的数据的附加字段。
考虑一个名为 myData 的字段,它存储值“AAA”和“aaa”。要使排序不区分大小写,您需要存储第二个名为 myData_insensitive 的字段,其中包含不区分大小写的数据版本:
DocA: -> myData = 'AAA' -> myData_insensitive = 'AAA' DocB: -> myData = 'aaa' -> myData_insensitive = 'AAA' DocC: -> myData = 'BBB' -> myData_insensitive = 'BBB' DocD: -> myData = 'bbb' -> myData_insensitive = 'BBB'
按不区分大小写的数据查询和排序
您现在可以通过 myData_insensitive 查询和排序数据,这将提供所需的不区分大小写的排序结果。
Unicode 和本地注意事项
这很重要需要注意的是,Unicode 的大小写标准化比简单地转换为小写或大写更复杂。语言可能有不同的排序规则,影响字符的排序方式。
使用大小写折叠进行大小写标准化
要解决这些复杂性,您可以使用大小写折叠实现大小写标准化,这确保不同大小写形式的字符(例如“a”、“A”)被视为等效。现代浏览器支持此功能的本机函数。
这是一个示例:
<code class="javascript">caseFoldNormalize = function (s) { return s.normalize('NFKC').toLowerCase().toUpperCase().toLowerCase(); };</code>
此示例将字符串 s 转换为完全规范化的版本,忽略大小写差异。
通过利用不区分大小写的排序和规范化,您可以以不区分大小写的方式对 Cloud Firestore 中的数据进行有效排序,从而确保数据排序的一致性,无论大小写如何变化。
以上是如何使用 Cloud Firestore 的查询实现不区分大小写的排序?的详细内容。更多信息请关注PHP中文网其他相关文章!