Firebase多列筛选器查询

时间:2017-12-11 12:05:50

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

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

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

enter image description here

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

假设我想获取用户ID 70(此处为70用户ID)和75(所选用户ID)的数据 那么我将生成新的70_75唯一但是如果场景被交换的话(如果用户ID为75,则所选用户ID为70) 然后我将生成75_70的新独特,但我希望两者都是唯一的匹配。

示例:

第一个唯一身份证是70_75 第二个唯一身份证是75_70

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

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

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

1 个答案:

答案 0 :(得分:0)

这取决于用例。在聊天应用的情况下,可能没有基于谁开始聊天的区别。因此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来确定这些用户的房间密钥。然后你只需从那里读取消息,而不必查询(更长的)消息列表。