android - 这个 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();
解决方案
问题很可能在这里:
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
推荐阅读
- javascript - 如果一个对象的键值是一个数组,它会生成一个新的对象
- nlp - AWS Sage Maker Auto Pilot 是否适合 NLP?
- laravel - 数据未加载到 Vue 应用程序的编辑表单中
- mapping - 没有参考基因组的植物作图和从头组装
- docker - Docker run --mount 在 RUN 期间使所有文件在不同的文件夹中可用
- python - 为什么我的 django 项目中通道层不与 Redis 通信?
- javascript - Vue.js 中元素数组的 V-model
- javascript - 根据用户所在的页面更改导航组件
- javascript - JavaScript范围:在函数中保留数组中的对象
- visual-studio - 关闭应用程序时Android模拟器无法拦截短信