栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用查询的Cloud Firestore大小写不​​敏感排序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用查询的Cloud Firestore大小写不​​敏感排序

Cloud Firestore中的排序区分大小写。没有标志可以使排序忽略大小写。

实现用例的唯一方法是将字段存储两次。

假设您存储“ AAA”和“
aaa”的字段称为

myData
。在客户端代码中,您需要存储第二个字段,称为
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
,但显示
myData

关于此区域的两个有趣的事情是:

  1. 使用Unipre,删除大小写不仅比’toLowerCase’更复杂
  2. 不同的人类语言会对相同的字符进行不同的排序

无需为每个排序规则创建单独的索引来解决(2),处理(1)的一种实现方法是通过大小写折叠。如果您只想支持现代浏览器版本,那么下面为您提供一个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;}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);});

这将为您提供Cloud Firestore中包含以下字段的文档:

{  "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"}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464852.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号