Angular Firebase:以动态方式操作数据的困难
几天以来,我一直很难在我的web应用程序(angular+firebase)上完成我想做的事情 下面是一个示例(它是一个聊天室): 我想列出currentUser!=playerExluded(用户可以看到除他被排除在外的消息以外的所有消息),并且它必须是动态的 我知道用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
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)