当前位置: 首页 > 知识库问答 >
问题:

在密钥随机的Firebase实时数据库中查询子级嵌套值

公羊伟志
2023-03-14

我在从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个答案

印子平
2023-03-14

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

如果要筛选多个属性(作为AND),通常可以将要筛选的值组合到单个(合成)属性中。例如,您还可以(也可以)将属性中每个节点的键添加到:“projectName_key”:“PN-1_1346”中,然后对该属性进行排序/筛选。

有关此方法和其他方法的更长示例,请参阅我的答案:Firebase中基于多个where子句的查询

 类似资料:
  • 我正在尝试运行Firebase实时数据库查询,以根据从根嵌套在第4级的值过滤数据。下面是数据结构,我的查询是: 但是这个查询没有返回任何数据。我已经启用了索引,但没有任何警告。我还将我的查询改为< code >。order by child(' info status '),但没有结果。 如果我将ref设置为低于一个级别,即,那么它会成功获得结果。但是在我的场景中,我没有可以在中使用的用户ID。

  • 我有一个firebase数据库,员工数据的结构如下。我还有一个用户表,它具有'Company ID'属性。每次用户登录时,我都希望获取与用户“公司ID”匹配的所有员工。是否有可能实现这使用firebase数据库规则或我必须写一些查询。

  • 我已经更改了数据库,以便为所有条目提供唯一的密钥。 我是斯佩萨。班 这段代码工作正常,直到我有了没有唯一密钥的“旧”数据库。现在我不得不面对这些陈述: 问题是我不知道如何有一个指向键的参考。特别是,变量“选项”不是“Spesa”类,但它是null。如果我没有适配器,我会做为(Datasnapshot ds: datasSnapshot.get儿童),然后进入为我将使用getValue,但在这种情况

  • 我有几个关于Azure Key Vault的问题,我需要一些技术帮助:链接https://docs.microsoft.com/en-us/Azure/key-vault/general/overview指出,“机密和密钥由Azure保护,使用行业标准算法、密钥长度和硬件安全模块(HSMs)。使用的HSMs经过联邦信息处理标准(FIPS)140-2级验证”。 我想确认这是否适用于秘密,就像适用于密

  • 3.移除值事件侦听器和脱机的区别。

  • 在firebase中给定下面的数据结构,我想运行一个查询来检索博客'EFG'。我现在不知道用户id。