相关疑难解决方法(0)

如果子项的子项包含值,则为Firebase查询

表的结构是:

  • 聊天记录
  • - > randomId
  • - > - >参与者
  • - > - > - > 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
        }
    });
 }
Run Code Online (Sandbox Code Playgroud)

firebase firebase-realtime-database angularfire2 angular

55
推荐指数
1
解决办法
1万
查看次数

Firestore - 如何构建订阅源并遵循系统

我在我的测试社交网络应用程序中使用Firebase实时数据库,您可以在其中关注并接收您关注的人员的帖子.传统的社交网络.我将我的数据库构造成这样的东西 -

Users
--USER_ID_1
----name
----email
--USER_ID_2
----name
----email

Posts
--POST_ID_1
----image
----userid
----date
--POST_ID_2
----image
----userid
----date

Timeline
--User_ID_1
----POST_ID_2
------date
----POST_ID_1
------date
Run Code Online (Sandbox Code Playgroud)

我还有另一个节点"内容",它只包含所有用户帖子的ID.因此,如果"A"跟在"B"之后,那么B的所有帖子ID都添加到A的时间轴.如果B发布了一些内容,那么它也会添加到其所有关注者的时间轴中.

现在这是我的实时数据库解决方案,但它显然存在一些可扩展性问题

  • 如果有人拥有10,000个关注者,则新帖子被添加到所有10,000个关注者的时间线中.
  • 如果有人拥有大量帖子,那么每个新粉丝都会在他的时间轴中收到所有这些帖子.

这些都是一些问题.

现在,我正在考虑将整个事情转移到firestore上,因为它声称是"可扩展的".那么我应该如何构建我的数据库,以便在firestore中消除我在实时数据库中遇到的问题.

java android database-design firebase google-cloud-firestore

44
推荐指数
5
解决办法
6627
查看次数

Firebase中的多对多关系

我有一个Firebase数据库.我有公司和承包商.承包商可以为多个公司工作,公司可以拥有多个承包商.这是一个简单的多对多关系.我希望能够回答有关公司和承包商的问题:

  1. 鉴于一家公司,谁是现有的承包商.
  2. 鉴于承包商他们为公司工作的是什么.

在firebase中构建数据的替代方法有哪些?

nosql firebase firebase-realtime-database angularfire2

33
推荐指数
2
解决办法
1万
查看次数

查询firebase中的分层数据结构

我有一个应用程序,以树形结构存储数据,我想将其保存到Firebase.

树中的每个节点都是这样的:

    node:
        size: // the number of items
        data: // array of items
        0: // child node 0
        1: // child node 1
        2: // child node 2
        3: // child node 3
Run Code Online (Sandbox Code Playgroud)

所以基本上,它是一个四叉树.问题是如果我加载树的根节点,它将是巨大的,因为firebase将创建包含整个树的快照.如果我能够首先读取树结构但没有"数据"字段,那么我会选择性地在某些节点中加载"数据"字段.

目前,似乎没有办法有效地做到这一点.我能想到的唯一方法是逐节点地查询树节点:

    read /node/size
    if (node has children)
      for i=0:3
         read /node/i/size
Run Code Online (Sandbox Code Playgroud)

但是,这种方法将使用太多的往返,并且没有办法判断一个节点是否有子节点而没有完全加载子节点(如果我在节点中添加'hasChild'字段,它可以完成,但它似乎是多余的).

我真诚地建议firebase开发团队可以实现一种方法,允许用户过滤返回的数据中的字段.一种新的查询方法将是最好的.

    var query = rootRef.filter("*/size");
    query.on('value', function(snapshot) {
        // snapshot contains only 'size' fields.
    });
Run Code Online (Sandbox Code Playgroud)

filter参数可以是正则表达式,查询将返回与正则表达式匹配的任何路径.我认为没有像这样的查询方法,使用firebase来存储分层数据结构是很重要的.当前的查询方法都假设存储在firebase中的数据相当"平坦"才有效.

题:

  1. 我应该如何使用现有的firebase基础架构存储树结构,以便可以有效地查询它?我需要能够向下和向上走树,并检索与特定节点相关的数据.

  2. firebase适合这种数据结构吗?什么替代策略更合适?

谢谢

firebase

3
推荐指数
1
解决办法
2752
查看次数