ホームページ >ウェブフロントエンド >jsチュートリアル >特定の参加者が関与するチャットについて Firebase に効率的にクエリを実行するにはどうすればよいですか?

特定の参加者が関与するチャットについて Firebase に効率的にクエリを実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-01 06:28:11856ブラウズ

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

複合クエリ文字列を使用して Firebase で参加者ごとにチャットを検索する

Firebase でデータを構造化する場合、効率的な取得のためにデータベース アクセスを最適化することが重要です。これは、複雑な関係をクエリする場合に特に重要になります。

元のクエリの問題

参加者リストとチャット アイテムを含む「chats」という名前の Firebase テーブルを想像してください。目標は、指定されたユーザー名が関係するすべてのチャットを検索することです。残念ながら、現在のクエリ:

this.af.database.list('chats', {
    query: {
        orderByChild: 'participants',
        equalTo: username, // How to check if participants contain username
    }
});

は有効ではありません。これは次の理由によるものです。

  • Set vs Array: 参加者リストは配列としてモデル化されており、重複エントリが許可されています。この構造は、参加者の一意の側面を正確に反映していません。
  • インデックスなしプロパティ: 参加者がチャットに存在するかどうかを確認するには、ユーザー名ごとに専用のインデックスを作成する必要があります。

最適化されたデータ構造

これらの問題に対処するには、カテゴリをツリーの最上位に保存し、データベース構造を平坦化することでインデックスを反転することを検討してください:

userChatrooms: {
  john: {
    chatRoom1: true,
    chatRoom2: true
  },
  puf: {
    chatRoom1: true,
    chatRoom3: true
  }
}

この構造により、特定のユーザーのチャット ルーム リストを効率的にクエリできます:

ref.child('userChatrooms').child('john')

Cloud Firestore を使用した複合クエリ

Cloud Firestore を使用している場合は、次のことが可能です。強力な array-contains 演算子を活用し、配列をセットとして扱います:

db.collection('chats').where('participants', 'array-contains', username)

このクエリは、指定されたユーザーを参加者として含むチャットを効率的に検索します。

データ構造を最適化し、適切なデータ構造を採用することにより、クエリ手法を使用すると、複雑な関係シナリオにおける Firebase クエリのパフォーマンスを大幅に向上させることができます。

以上が特定の参加者が関与するチャットについて Firebase に効率的にクエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。