我的问题是如何使用存储在firebase实时数据库中的from和to variable(列名)来实现聊天消息。
下面的图片将解释我的数据库架构。
现在我知道我必须根据“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实时数据库。
如果您无法理解,请道歉。 提前致谢
答案 0 :(得分:0)
这取决于用例。在聊天应用的情况下,可能没有基于谁开始聊天的区别。因此70_75
和75_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来确定这些用户的房间密钥。然后你只需从那里读取消息,而不必查询(更长的)消息列表。