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透過其數組包含運算符提供了對此類查詢的增強支持,該運算符允許根據其中的值過濾文件數組:
query = collection.where('participants', 'array-contains', username);
這提供了比Firestore 更簡潔、更高效的解決方案。
在 Firebase 中,查詢嵌套資料結構需要仔細規劃和理解資料結構限制。透過使用集合和倒排索引,並利用 Cloud Firestore 的陣列包含運算符,開發人員可以在 Firebase 應用程式中有效地處理此類查詢。
以上是如何有效率地查詢 Firebase 中包含特定參與者的聊天?的詳細內容。更多資訊請關注PHP中文網其他相關文章!