首頁 >web前端 >js教程 >如何有效率地查詢 Firebase 中包含特定參與者的聊天?

如何有效率地查詢 Firebase 中包含特定參與者的聊天?

Susan Sarandon
Susan Sarandon原創
2024-12-24 08:10:15959瀏覽

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透過其數組包含運算符提供了對此類查詢的增強支持,該運算符允許根據其中的值過濾文件數組:

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

這提供了比Firestore 更簡潔、更高效的解決方案。

結論

在 Firebase 中,查詢嵌套資料結構需要仔細規劃和理解資料結構限制。透過使用集合和倒排索引,並利用 Cloud Firestore 的陣列包含運算符,開發人員可以在 Firebase 應用程式中有效地處理此類查詢。

以上是如何有效率地查詢 Firebase 中包含特定參與者的聊天?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn