首页 > 解决方案 > 这个 orderByChild Firebase 实时代码有什么问题?

问题描述

此代码返回错误。谁能指导我有什么问题?

DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Doctor");

dbRef.keepSynced(true);

DatabaseReference dbRef2 = FirebaseDatabase.getInstance().getReference("Patient").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
Query query = dbRef.orderByChild("filter").equalTo(passed,dbRef2.child("location").toString());

FirebaseRecyclerOptions<DoctorHelperClass> options = new FirebaseRecyclerOptions.Builder<DoctorHelperClass>()
                .setQuery(query, DoctorHelperClass.class).build();

标签: androidfirebasefirebase-realtime-database

解决方案


问题很可能在这里:

Query query = dbRef.orderByChild("filter").equalTo(passed,dbRef2.child("location").toString());

如果存在多个具有相同filter值的节点,equalTo则使用第二个参数 to 进一步限制返回的结果。它并没有指明要过滤的属性的名称,您可能会这么想。

过滤的完整路径需要在对orderByChild. 因此,如果您想对filter/location每个子节点的属性进行排序/过滤,那就是:

Query query = dbRef.orderByChild("filter/location").equalTo(passed);

更新:因为您表示要对两个属性进行排序/过滤。

Firebase 数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合成一个(合成)属性。例如,在您的情况下,您可以订购/过滤"location_specialization": "locationValue_specializationValue".

有关此方法和其他方法的示例,请在此处查看我的答案:Query based on multiple where clauses in Firebase


推荐阅读