为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Firebase 实时数据库查询子项中的嵌套值,其中键是随机的

使用 Firebase 实时数据库查询子项中的嵌套值,其中键是随机的

牧羊人nacy 2022-05-26 17:41:19
我在从 Firebase 实时数据库中查询嵌套数据时遇到问题。给定以下示例数据结构:"crossing":        "1346":            "data1": "value"            "data2": "value"            "projectName": "PN-1"        "1562":            "data1": "value"            "data2": "value"            "projectName": "PN-1"        "1933":            "data1": "value"            "data2": "value"            "projectName": "PN-2"让我们假设这个集合将有数百个孩子。此外,在查询执行时间之前,ID 是随机的且未知的。如图所示,每个交叉点都有其他几个值。起初,我必须列出键以给定值开头的所有十字路口。所以,例如,如果我搜索“1”,我想在这个简单的例子中得到所有的交叉点。这个代码片段解决了这个问题。虽然,我仍然不确定这是否是实现这一目标的最佳方式。firebase  .database()  .ref("crossing")  .orderByKey()  .startAt(self.searchedKey)  .endAt(self.searchedKey + "\uf8ff")  .once("value", function(snapshot) {    if (snapshot.val()) {      console.log(snapshot.val());    }  });我的主要问题是,现在我必须列出其projectName值以给定值开头的所有过境点。但是,我无法为此编写正确的查询。我不能使用.orderByChild()函数,因为子键(ID)是未知的。我无法查询集合中的所有交叉点并遍历前端的所有元素,因为稍后这个对象将很大,有很多交叉点。正如我所看到的,某种顺序仍然是必须的。
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

Firebase 实时数据库只能对每个子节点的一个值进行排序/过滤。它可以是每个节点的键 ( orderByKey())、它的值 ( orderByValue()),也可以是每个节点下已知路径上的单个属性的值 ( orderByChild("path/to/property"))。您可以使用其中任何一个,但只能将其中一个用于任何查询。

如果要过滤多个属性(作为 AND),通常可以将要过滤的值组合到单个(合成)属性中。例如,您可以(也)在属性中添加每个节点的键并将其与项目名称组合到:"projectName_key": "PN-1_ 1346"然后对该属性进行排序/过滤。

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


查看完整回答
反对 回复 2022-05-26
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信