【问题标题】:Firebase Multiple Column Filters QueryFirebase 多列过滤器查询
【发布时间】:2017-12-11 12:05:50
【问题描述】:

我的问题是如何使用存储在 firebase 实时数据库中的 from 和 to 变量(列名)来实现聊天消息。

下图将解释我的数据库架构。

现在我知道我必须根据“from”和“to”列值获取记录,但我研究过没有任何可能的方法可以执行多个 equalTo 或 orderBy 条件,那么我该如何实现这一点。我还有一个想法,即使用从“from 和 to”值生成的新密钥

假设我想获取用户 id 70(这里 70 是登录用户 id)和 75(选定用户 id)的数据 然后我将生成 70_75 的新唯一值,但是如果交换场景会怎样(75 登录用户 ID 和 70 选定用户 ID) 然后我将生成 75_70 的新唯一值,但我希望两者都唯一匹配。

例子:

第一个唯一 ID 是 70_75 第二个唯一 ID 是 75_70

但我只想要一个唯一的 ID 来代表两个用户的消息,例如 7045757。 如果你们知道如何生成代表两个用户的新 ID,请分享。我不想从服务器加载所有消息,这样会减少我的内存带宽使用并节省时间。 我已准备好接受任何重新评估 Firebase 查询的解决方案或建议。

我目前正在使用安装了 angularfire2 的 angular 4 中的 firebase 实时数据库。

如果您无法理解,请致歉。 提前致谢

【问题讨论】:

    标签: angularjs firebase firebase-realtime-database nosql angularfire


    【解决方案1】:

    这在一定程度上取决于用例。在聊天应用程序的情况下,可能没有基于谁开始聊天的区别。所以70_7575_70 在语义上是相同的。在这种情况下,以可预测的顺序存储值。例如。如果您按字典顺序对它们进行排序,则在这两种情况下都会得到70_75,因此可以查询该组合。我在这里的回答中对此进行了探索:http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase

    一般来说,对于聊天,我建议将同一组用户之间的消息放入一个公共节点,该数据库相当于一个聊天室

    chat_rooms
      70_75
        -L04....6mg: ...
        -L04....uwuj: ...
    

    这样您就可以找到用户的节点/房间,您首先通过组合他们的 UID 来确定这些用户的房间的密钥。然后,您只需从那里读取消息,而不必查询(更长的)消息列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 2018-05-08
      • 2018-08-04
      • 2018-08-14
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      相关资源
      最近更新 更多