【问题标题】: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();

【问题讨论】:

  • 错误是什么?

标签: android firebase firebase-realtime-database


【解决方案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" 上订购/过滤。有关此方法和其他方法的示例,请在此处查看我的答案:stackoverflow.com/questions/26700924/…
猜你喜欢
  • 1970-01-01
  • 2012-08-07
  • 2014-08-29
  • 2013-06-05
  • 2014-06-04
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多