>  기사  >  웹 프론트엔드  >  Cloud Firestore에서 대소문자를 구분하지 않는 정렬을 활성화하는 방법은 무엇입니까?

Cloud Firestore에서 대소문자를 구분하지 않는 정렬을 활성화하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-22 08:57:02851검색

How to Enable Case Insensitive Sorting in Cloud Firestore?

쿼리를 사용하여 Cloud Firestore에서 대소문자를 구분하지 않는 정렬

문제 설명

Cloud Firestore의 OrderBy 쿼리는 데이터를 대소문자를 구분하여 정렬하므로 예상 결과와 일치하지 않는 결과가 발생합니다. 실제 정렬 동작. 예를 들어 "AAA" 및 "aaa"로 저장된 데이터는 "AAA", "BBB", "aaa" 및 "bbb"로 정렬되는 반면 원하는 순서는 "AAA", "aaa", "BBB", 및 "bbb".

대소문자를 구분하지 않는 정렬 해결

Cloud Firestore는 대소문자를 구분하지 않는 정렬을 위한 내장 플래그를 제공하지 않습니다. 유일한 효과적인 해결책은 중요한 필드를 문서에 두 번 저장하는 것입니다. 첫 번째 필드인 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에서 값을 추출하여 표시됩니다.

유니코드와 국제화

유니코드 문자를 다룰 때 대소문자 구분이 더 복잡해집니다. 대소문자를 구분하지 않는 정렬은 언어에 따라 다를 수 있으므로 일관된 결과를 보장하려면 추가 처리가 필요합니다. 한 가지 접근 방식은 caseFoldNormalize()를 사용하여 데이터를 정규화하고 결과를 별도의 필드에 저장하는 것입니다.

<code class="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) &amp;&amp; Object.prototype.toString.call(doc[field]) === &quot;[object String]&quot;) {
              doc[field.concat(&quot;_insensitive&quot;)] = caseFoldNormalize(doc[field])
            }
            break;
        }
      }
    }
  }
  return doc;
}</code>

효과적인 해결 방법임에도 불구하고 이 접근 방식에는 추가 저장 및 처리 오버헤드가 포함된다는 점에 유의하는 것이 중요합니다. 이는 프로덕션 애플리케이션에서 구현할 때 고려해야 할 사항입니다.

위 내용은 Cloud Firestore에서 대소문자를 구분하지 않는 정렬을 활성화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.