Firebase 多列过滤器查询

Firebase Multiple Column Filters Query

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

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

现在我知道我必须根据 "from" 和 "to" 列值获取记录,但我研究过没有任何可能的方法来做一个以上的 equalTo 或 orderBy 条件然后我怎样才能做到这一点。我还有一个想法是使用将从 "from and to's" 值

生成的新密钥

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

示例:

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

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

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

如有不明白之处敬请见谅。 提前致谢

这在一定程度上取决于用例。对于聊天应用程序,可能不会根据谁发起 聊天来区分。所以 70_7575_70 在语义上是相同的。在这种情况下,以可预测的顺序存储值。例如。如果按字典顺序排列它们,那么在这两种情况下都会得到 70_75 ,因此可以查询该组合。我在这里的回答中对此进行了探讨:

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

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

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