如何仅检索 Firebase 的子节点键?

发布时间:2021-03-07 21:29

enter image description here

实际上我正在将所有主题的数据提取到listView

分别是病理学和社会科学。

当我检索密钥时,我得到了结束日期和开始日期。

我怎样才能得到唯一有像这里病理学和土壤场景这样的节点的孩子。 ?

回答1

当您使用 Firebase 检索节点时,它始终检索整个节点。没有办法获得没有子节点的节点,或者(超出查询所能做的)有子节点的子集。

当您有这种需求时,通常意味着您在一个分支中混合了两种类型的数据。 Firebase 文档建议使用 avoiding such data nesting

在您的情况下,我会将数据拆分为两个顶级节点,每个节点的子节点都具有相同的键。类似的东西:

ExamInfos: {
  "-MV8_...": {
    "endingDate": ...,
    "examType": ...,
    "programme": ...,
    "startingDate": ...
  }
},
ExamSugbjects: {
  "-MV8_...": {
    "PATHOLOGY": { ... },
    "SOIL SCIENCE": { ... }
  }
}

现在您可以通过加载其 ExamSubjects 子节点来获取考试的所有科目,通过加载其 ExamInfos 子节点来获取所有其他信息,如果需要,您可以同时加载两者。与许多开发人员最初的预期相反,这不会花费更多时间,因为 Firebase 可以pipeline the requests over its existing web socket connection


作为单独的建议,我还考虑以允许更多排序和过滤的格式存储日期。最常见的格式是 2021 年 3 月 7 日的 2021-03-07