如何在Firebase中查询多个节点/引用

时间:2019-10-26 14:26:53

标签: android firebase kotlin firebase-realtime-database

我有2个节点,user_account_settingsusers。我想编写一个查询,以使两个节点的子节点都相等。我写了一个查询,但它返回空值。如何编写多引用查询。

数据结构:

enter image description here

ViewModel类:

private val databaseRef = FirebaseDatabase.getInstance().reference
        .orderByChild("username")
        .equalTo("faisal.askani")

    private val liveData = FirebaseQueryLiveData(databaseRef)

ProfileFramgnet:

viewModel.getDataSnapshotLiveData().observe(viewLifecycleOwner,  Observer { dataSnapshot ->
            if(dataSnapshot != null)
            {
                for (ds: DataSnapshot in dataSnapshot.children)
                {
                    //user node
                    if (ds.key.equals("users"))
                    {
                        val user = ds.getValue(User::class.java)
                        viewModel.setUserInfo(user!!)
                    }

                    if(ds.key.equals("user_account_settings"))
                    {
                        val userAccountInfo = ds.getValue(UserAccountSettings::class.java)
                        viewModel.setUserAccountInfo(userAccountInfo!!)
                    }
                }
            }
        })

1 个答案:

答案 0 :(得分:1)

  

如何编写多引用查询?

您无法执行“多参考查询”。您只能从运行查询的位置(包括所有子项)获得结果。在您的特定情况下,您需要使用两个单独的查询,一次是获取用户详细信息,第二次是获取帐户详细信息。

的确可以在根引用上添加一个侦听器并获取整个数据库中的所有子级,但这不是一个选择,因为您需要下载整个数据库的内容,这浪费了带宽和资源。