Android OrderByChild向结果中再添加一个元素
我试图只获取某个用户拥有的事件,问题是在执行Android OrderByChild向结果中再添加一个元素,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我试图只获取某个用户拥有的事件,问题是在执行orderByChild()之后,它会过滤一个我不想要的事件 代码 现在,这是我的数据库结构 问题 现在,当我运行此代码并执行日志以获取用户的事件时,2UHZWR6B8P9XJPULYRAG6AEGN63,我又获得了一个不属于该用户的事件,该事件就是这个-LU930PpCaQXT8CvUbc8 我的日志 事件:用户的-LU930PpCaQXT8CvUbc82uhzwr6b8p9xjpulyrag6aegn63 事件:-LTRz61EcBUx RLSS
orderByChild()
之后,它会过滤一个我不想要的事件
代码
现在,这是我的数据库结构
问题
现在,当我运行此代码并执行日志以获取用户的事件时,2UHZWR6B8P9XJPULYRAG6AEGN63
,我又获得了一个不属于该用户的事件,该事件就是这个-LU930PpCaQXT8CvUbc8
我的日志
事件:用户的-LU930PpCaQXT8CvUbc82uhzwr6b8p9xjpulyrag6aegn63
事件:-LTRz61EcBUx RLSSEaU用户的事件2uhzwr6b8p9xjpulyrag6aegn63
事件:-LTSGFGdW1nQbtd9HOBh用户的事件2uhzwr6b8p9xjpulyrag6aegn63
事件:-LTSIG_lqckgHEZ1q9YS用户的事件2uhzwr6b8p9xjpulyrag6aegn63
如您所见,正在列出该用户的所有事件,但该用户只有3个与之关联的事件
当我用这一行订货时
.orderByChild(snapshotJugadoresTutor.getKey())
我希望只获取用户ID为
2uhzwr6b8p9xjpulyrag6aegn63
的节点,然后循环并从该用户获取每个事件ID,但相反,我也从该用户获取事件IDGVD0bLDf41VDdraN67mXjAS6KPk1
您不能仅使用基于JSON的数据库(如Firebase)进行筛选。
orderByChild只更改返回值的排序。因此,您基本上是对该键下的所有值进行排序,没有进行过滤。
在这一点上,你有3个选择继续
选项1-效率不高,建议仅用于小型应用程序:
您可以对所有值进行排序,然后进行筛选
选项2-推荐:
您可以更改数据结构。创建另一个节点,如“UserEvents”。在它下面存储UID。在这个UID下应该只有那个用户的事件
选项3-推荐和功能:
您可以使用Elasticsearch。它非常适合复杂的查询。切换到“随用随付”计划后,您可以将其与Firebase和Google云功能一起使用,也可以使用手电筒扩展将另一台服务器与Firebase数据库集成。谢谢您的帮助,是的,我已经有了UserEvents节点,这就是为什么我需要从每个用户那里获取这个特定的ID,然后转到该表以获取值:),我将继续尝试其他方法,谢谢,如果没有人回答,我会等待,我会将其标记为correct@Gast据我所知,orderByChild只会更改查询的排序,而不会更改返回的结果。你能验证一下吗?这是绝对正确的,我忽略了这一点,这就是为什么我得到的是4个值而不是3个值,我试图添加一点if条件来过滤结果,当用户id与搜索的id相同时Hanks mustafa获得提示,现在我查询events节点,获取所有指向辅助节点的密钥,并检查用户是否与我请求的相同刚刚修复了上述问题:)
.orderByChild(snapshotJugadoresTutor.getKey())