>웹 프론트엔드 >JS 튜토리얼 >특정 참가자가 포함된 채팅에 대해 Firebase를 효율적으로 쿼리하는 방법은 무엇입니까?

특정 참가자가 포함된 채팅에 대해 Firebase를 효율적으로 쿼리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-24 08:10:15955검색

How to Efficiently Query Firebase for Chats Containing a Specific Participant?

자녀의 하위에 포함된 값에 대해 Firebase 테이블을 쿼리하는 방법

소개

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 Alternative

Cloud Firestore는 array-contains 연산자를 통해 이러한 유형의 쿼리에 대한 향상된 지원을 제공합니다. 이를 통해 내부 값을 기반으로 문서를 필터링할 수 있습니다. 배열:

query = collection.where('participants', 'array-contains', username);

Firestore보다 더 간결하고 효율적인 솔루션을 제공합니다.

결론

Firebase에서 중첩 데이터 구조를 쿼리하려면 데이터에 대한 세심한 계획과 이해가 필요합니다. 구조 제한. 집합과 역색인을 사용하고 Cloud Firestore의 배열 포함 연산자를 활용하면 개발자는 Firebase 애플리케이션에서 이러한 쿼리를 효율적으로 처리할 수 있습니다.

위 내용은 특정 참가자가 포함된 채팅에 대해 Firebase를 효율적으로 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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