这个 orderByChild Firebase 实时代码有啥问题?
Posted
技术标签:
【中文标题】这个 orderByChild Firebase 实时代码有啥问题?【英文标题】:What is wrong with this orderByChild Firebase realtime code?这个 orderByChild Firebase 实时代码有什么问题? 【发布时间】:2021-09-18 09:13:38 【问题描述】:此代码返回错误。谁能指导我这是什么问题?
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();
【问题讨论】:
错误是什么? 【参考方案1】:问题可能出在这里:
Query query = dbRef.orderByChild("filter").equalTo(passed,dbRef2.child("location").toString());
如果有多个节点具有相同的filter
值。equalTo
的第二个参数用于进一步限制返回的结果。它确实不指明了要过滤的属性的名称,您可能会这么认为。
过滤的完整路径需要在对orderByChild
的调用中。因此,如果您想对每个子节点的 filter/location
属性进行排序/过滤,那就是:
Query query = dbRef.orderByChild("filter/location").equalTo(passed);
更新:因为您表示要对两个属性进行排序/过滤。
Firebase 数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合成单个(合成)属性。例如,在您的情况下,您可以在"location_specialization": "locationValue_specializationValue"
上订购/过滤。
有关此方法和其他方法的示例,请在此处查看我的答案:Query based on multiple where clauses in Firebase
【讨论】:
但我希望它等同于两个不同的值。除了位置,我还想比较专业化。我该怎么做? Firebase 数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合成单个(合成)属性。例如,在您的情况下,您可以在"location_specialization": "locationValue_specializationValue"
上订购/过滤。有关此方法和其他方法的示例,请在此处查看我的答案:***.com/questions/26700924/…以上是关于这个 orderByChild Firebase 实时代码有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
Firebase .orderByChild().equalTo().once().then() 当孩子不存在时承诺
firebase 和 Ionic 2 上的降序 orderByChild()
Flutter:Firebase 实时数据库 orderByChild 对查询结果没有影响