Firebase:以动态方式处理数据的困难

时间:2018-09-17 14:07:05

标签: angular firebase firebase-realtime-database google-cloud-functions

几天以来,我在网络应用程序上做自己想做的事情(角度+ firebase)时遇到了困难。

以下是一个示例(这是一个聊天室):

messages
    |__ 1
        |__ author: "foo"
        |__ message: "hello world"
        |__ playerExcluded: "foo2"
    |__ 2
        |__ author: "foo2"
        |__ message: "hello world"
        |__ playerExcluded: "foo"

我想列出currentUser!= playerExluded的所有消息(用户可以看到除他以外的消息以外的所有消息),并且它必须是动态的。

我知道使用Firebase数据库查询无法做到这一点,这就是为什么我开始查看云功能但没有“读取”触发器的原因。

让我们想象一下查询是可能的,就像这样:

firebase.database().ref('/messages').orderByChild('playerExcluded').differentTo(playerUsername)

有没有办法以动态方式使用Firebase?

2 个答案:

答案 0 :(得分:1)

正如您所发现的,对于Cloud Functions,确实没有onRead数据库触发器。您可以通过building your own HTTPS function, which you then call from the app来模仿行为。

但是请注意,实时数据库的Admin SDK(您在Cloud Functions中使用)也不允许您要查询。因此,您仍然必须加载所有消息并过滤代码中排除的消息。

答案 1 :(得分:1)

您要在playerExcluded != playerUsername处获取所有消息。因此,我没有为您提供完整的代码,而只是为您提供了完成代码的想法。

首先,通过messages检索整个listenerForSingleValueEvent节点。

然后通过foreach loop遍历其子级。然后检查playerExcluded是否匹配playerUsername,如果匹配,则忽略continue的这一迭代,如果不匹配,则将其保存在Array中。

一天结束时,您将获得Array的所有必需数据。