【问题标题】:How to get all child keys in Firebase?如何获取 Firebase 中的所有子密钥?
【发布时间】:2021-06-12 09:19:36
【问题描述】:

我有一个包含大量子节点的 Firebase(实时数据库)节点。我想列出所有子键,所以我使用了这个代码:

reference.once('value', snapshot=>{
    snapshot.forEach(child => {
        console.log(child.key);
    })
})

那么 Firebase 会抛出异常:

指定的payload过大,请请求数据少的位置。

所以我不知道如何获取子密钥(仅 keys)而不会出现该错误。请帮忙!

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    一些意外错误可能会发送cancel 事件并终止连接。原因在为此事件提供的数据中描述。一些潜在原因如下: 1. Firebase 实时数据库规则不再允许在请求的位置进行读取。此原因的data 描述为“权限被拒绝”。 2. 一次写入触发了一个事件流媒体,它发送了一个超过我们的限制 512MB 的大型 JSON 树。导致此原因的data 是“指定的有效负载太大,请请求数据较少的位置。”

    由于实时数据库仅限制每个请求 500Mb,因此为了执行此请求,您应该尝试使用 child_added listener 分页查询或尝试迭代子节点,而不是查询所有子节点。

    【讨论】:

      【解决方案2】:

      使用 Firebase 的浅查询https://firebase.google.com/docs/database/rest/retrieve-data#shallow

      例如,如果您的数据是这样的结构

      parent: {
        child_0: {...<large data>...},
        child_1: {...<large data>...},
        child_2: "abc",
        child_3: 123
      }
      

      浅层查询的结果是:

      parent: {
        child_0: true,
        child_1: true,
        child_2: "abc",
        child_3: 123
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 2023-03-18
        • 2016-11-08
        • 2017-09-15
        相关资源
        最近更新 更多