首页 > web前端 > js教程 > 如何高效查询 Firebase 中包含特定参与者的聊天?

如何高效查询 Firebase 中包含特定参与者的聊天?

Susan Sarandon
发布: 2024-12-24 08:10:15
原创
951 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板