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

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

Susan Sarandon
Susan Sarandon原創
2024-12-19 16:17:13114瀏覽

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

Firebase 查詢尋找包含參與者的聊天

背景:

背景:

考慮代表一個聊天系統,其中聊天有參與者和聊天項目。目標是查詢「聊天」表,以根據給定的使用者名稱字串檢索具有特定參與者的所有聊天。

初始嘗試:
  • 提供的程式碼嘗試使用 orderByChild 和 equalTo 方法透過「participants」子項查詢「chats」表,指定使用者名稱以尋找符合項。但是,這種方法有局限性,因為:
  • 參與者儲存為數組:此資料結構不能準確反映聊天中的參與者應該是唯一的事實。

索引限制:Firebase 需要預先定義索引來查詢巢狀路徑,這在處理時可能會變得非常麻煩動態資料。

倒排索引方法:
userChatrooms: {
  john: {
    chatRoom1: true,
    chatRoom2: true
  },
  puf: {
    chatRoom1: true,
    chatRoom3: true
  }
}

要解決這些限制,建議透過建立映射的「userChatrooms」節點來反轉資料結構使用者進入他們參與的聊天室。這樣可以進行有效的過濾user:

使用倒排索引查詢:
ref.child("userChatrooms").child("john")

使用倒排索引結構,找出使用者所有的​​聊天變得簡單:

Cloud Firestore替代方案:
Query query = firestore.collection("chats")
                    .whereArrayContains("participants", username);
雲端Firestore 透過其陣列包含運算符為此類查詢提供了更好的支援。這允許直接過濾數組中包含特定值的文件:

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

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