Firebase 데이터베이스는 데이터에 대한 다양한 기능을 제공합니다. 관리. 일반적인 문제 중 하나는 중첩된 하위 구조 내의 값을 기반으로 데이터를 쿼리하는 것입니다. 이 가이드에서는 Firebase에서 이러한 쿼리를 효율적으로 처리하는 방법을 보여줍니다.
다음 테이블 구조를 고려하세요.
chats --> randomId -->--> participants -->-->--> 0: 'name1' -->-->--> 1: 'name2' -->--> chatItems
목표는 '채팅'을 쿼리하는 것입니다. 특정 참가자가 포함된 모든 채팅을 검색하는 테이블입니다. 현재 쿼리 시도:
subscribeChats(username: string) { return this.af.database.list('chats', { query: { orderByChild: 'participants', equalTo: username, // How to check if participants contain username } }); }
Firebase의 고정 경로 인덱싱 제한으로 인해 문제에 직면했습니다.
1. 집합 대 배열:
처음에 저장된 참가자를 배열로 사용하는 데이터 구조는 중복을 허용하고 원하는 고유 참가자 모델을 반영하지 않습니다. Firebase 세트는 각 하위 요소가 한 번만 존재하도록 보다 적절한 솔루션을 제공합니다.
participants: { "puf": true }
2. 인덱스 반전:
채팅 내에 참가자를 중첩하는 대신 구조를 반전하여 참가자를 기반으로 채팅을 나열하는 "역 인덱스"를 생성해야 합니다. 이를 통해 사용자 채팅방에 대한 효율적인 쿼리가 가능해집니다.
userChatrooms: { john: { chatRoom1: true, chatRoom2: true }, puf: { chatRoom1: true, chatRoom3: true } }
이제 다음 쿼리로 사용자 채팅방을 검색할 수 있습니다.
ref.child("userChatrooms").child("john")
Cloud Firestore는 array-contains 연산자를 통해 이러한 유형의 쿼리에 대한 향상된 지원을 제공합니다. 이를 통해 내부 값을 기반으로 문서를 필터링할 수 있습니다. 배열:
query = collection.where('participants', 'array-contains', username);
Firestore보다 더 간결하고 효율적인 솔루션을 제공합니다.
Firebase에서 중첩 데이터 구조를 쿼리하려면 데이터에 대한 세심한 계획과 이해가 필요합니다. 구조 제한. 집합과 역색인을 사용하고 Cloud Firestore의 배열 포함 연산자를 활용하면 개발자는 Firebase 애플리케이션에서 이러한 쿼리를 효율적으로 처리할 수 있습니다.
위 내용은 특정 참가자가 포함된 채팅에 대해 Firebase를 효율적으로 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!