Angular Firebase:以动态方式操作数据的困难

Angular Firebase:以动态方式操作数据的困难,angular,firebase,firebase-realtime-database,google-cloud-functions,Angular,Firebase,Firebase Realtime Database,Google Cloud Functions,几天以来,我一直很难在我的web应用程序(angular+firebase)上完成我想做的事情 下面是一个示例(它是一个聊天室): 我想列出currentUser!=playerExluded(用户可以看到除他被排除在外的消息以外的所有消息),并且它必须是动态的 我知道用firebase数据库查询不可能做到这一点,这就是为什么我开始研究云函数,但并没有“读取时”触发器 让我们想象一下,如果有查询,它将是这样的: firebase.database().ref('/messages').order

几天以来,我一直很难在我的web应用程序(angular+firebase)上完成我想做的事情

下面是一个示例(它是一个聊天室):

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

我知道用firebase数据库查询不可能做到这一点,这就是为什么我开始研究云函数,但并没有“读取时”触发器

让我们想象一下,如果有查询,它将是这样的:

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

firebase是否有办法(以动态方式)做到这一点?

正如您发现的,云函数确实没有
onRead
数据库触发器。您可以通过以下方式模仿该行为


但是请注意,实时数据库的管理SDK(您在云函数中使用)也不允许您进行查询。因此,您仍然需要加载所有消息并在代码中过滤排除的消息。

正如您发现的,云函数确实没有
onRead
数据库触发器。您可以通过以下方式模仿该行为


但是请注意,实时数据库的管理SDK(您在云函数中使用)也不允许您进行查询。因此,您仍然需要加载所有消息并在代码中过滤排除的消息。

您想在
播放排除的位置获取所有消息!=playerUsername
。所以,我不是提供全部代码,而是提供如何完成的想法

首先,通过listenerForSingleValueEvent检索整个
消息
节点

然后通过
foreach循环
遍历其子循环。并检查
playerExcluded
是否与
playerUsername
匹配,如果匹配,则通过
继续
忽略此迭代,如果不匹配,则将其保存在
数组中


在一天结束时,您将有一个
数组
将显示您所需的所有数据。

您希望在
播放的位置获取所有消息playerUsername
。所以,我不是提供全部代码,而是提供如何完成的想法

首先,通过listenerForSingleValueEvent
检索整个
消息
节点

然后通过
foreach循环
遍历其子循环。并检查
playerExcluded
是否与
playerUsername
匹配,如果匹配,则通过
继续
忽略此迭代,如果不匹配,则将其保存在
数组中


在一天结束时,您将有一个
阵列
将显示您所需的所有数据。

我的意思是所有对firebase.database的调用都在我的角度服务上(客户端右侧?)。我想我对用户能做什么或不能做什么有点困惑,你想说什么?是否要根据登录用户动态更改Firebase数据库?如果是,那是不可能的我不想改变任何东西,我想读一些东西,在SQL中可能是“从PlayerExclude!=MyPlayerUserName在哪里找到了不同的方法?(不存在,这是我在帖子中的假设).安全地说,我认为这只是我的一个误解。我的意思是,我对firebase.database的所有调用都在我的角度服务上(客户端对吗?)。我想我对用户能做什么和不能做什么有些困惑。你想说什么?你想根据登录用户动态更改Firebase数据库吗?如果是,那是不可能的。我不想更改任何内容,我想阅读一些内容,在SQL中,它可以是“从PlayerExclude!的消息中选择*”MyPlayerUserName您在哪里找到不同的方法?(不存在,这是我帖子中的一个假设)。安全地说,我认为这只是对meDo的误解,你的意思是这样的:ref.on('value',(data)=>{data.forEach(child=>{if(child.val().playerExcluded!=username)this.messages.push(child.val();});如果我没有做错,这将在客户端进行排序,这意味着用户可以作弊并查看整个数据。您的意思是:ref.on('value',(data)=>{data.forEach(child=>{if(child.val().playerExcluded!=username)this.messages.push(child.val();});如果我没有做错的话,这将在客户端进行排序,这意味着用户可以作弊并查看整个数据
firebase.database().ref('/messages').orderByChild('playerExcluded').differentTo(playerUsername)