>  기사  >  웹 프론트엔드  >  Cloud Firestore의 쿼리로 대소문자를 구분하지 않는 정렬을 구현하는 방법은 무엇입니까?

Cloud Firestore의 쿼리로 대소문자를 구분하지 않는 정렬을 구현하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-22 08:54:03632검색

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

Cloud Firestore 쿼리를 사용한 Firestore 대소문자 구분 없는 정렬

Cloud Firestore에서 데이터 정렬은 기본적으로 대소문자를 구분합니다. OrderBy 메서드를 활용하면 지정된 필드를 기준으로 데이터를 오름차순 또는 내림차순으로 정렬합니다. 그러나 데이터에 'AAA' 및 'aaa'와 같이 대소문자 변형이 포함된 경우 반환된 순서가 원하는 것과 다를 수 있습니다.

대소문자 구분 정렬 문제

기본적으로 Firestore는 다음 순서로 데이터를 정렬합니다.

AAA
BBB
aaa
bbb

그러나 다음과 같이 예상할 수 있습니다.

AAA
aaa
BBB
bbb

해결책: 대소문자를 구분하지 않는 데이터 저장

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로 데이터를 쿼리하고 정렬할 수 있습니다.

유니코드 및 로컬 고려 사항

중요 유니코드의 대소문자 정규화는 단순히 소문자나 대문자로 변환하는 것보다 더 복잡합니다. 언어마다 서로 다른 대조 규칙이 있어 문자 정렬 방식에 영향을 미칠 수 있습니다.

대소문자 정규화를 위한 대소문자 구분 사용

이러한 복잡성을 해결하려면 대소문자 구분을 사용하여 대소문자 정규화를 구현할 수 있습니다. , 이는 서로 다른 대소문자 형태(예: 'a', 'A')를 가진 문자가 동일한 것으로 처리되도록 보장합니다. 최신 브라우저는 이를 위한 기본 기능을 지원합니다.

예는 다음과 같습니다.

<code class="javascript">caseFoldNormalize = function (s) {
  return s.normalize('NFKC').toLowerCase().toUpperCase().toLowerCase();
};</code>

이 예는 문자열 s를 대소문자 차이를 무시하고 완전히 정규화된 버전으로 변환합니다.

By 대소문자를 구분하지 않는 정렬 및 정규화를 활용하면 Cloud Firestore의 데이터를 대소문자를 구분하지 않고 효과적으로 정렬하여 대소문자 변화에 관계없이 데이터 순서의 일관성을 보장할 수 있습니다.

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

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