首页  >  文章  >  web前端  >  如何使用 Cloud Firestore 的查询实现不区分大小写的排序?

如何使用 Cloud Firestore 的查询实现不区分大小写的排序?

Linda Hamilton
Linda Hamilton原创
2024-10-22 08:54:03546浏览

How to Implement Case-Insensitive Sorting with Cloud Firestore's Query?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn