【问题标题】:How to get firebase data in inner node without the outer node name?如何在没有外部节点名称的情况下获取内部节点中的 Firebase 数据?
【发布时间】:2020-12-03 14:31:47
【问题描述】:

我想从 firebase 读取数据,在 ref ("locations/{{someLocation}}/logs/{{someDevice}}") 但我不知道是否存在正确的表格,因为我需要使用“.on”来不断听到所有设备的变化,问题是我需要读取所有位置的日志中的所有设备,但我没有想要其他信息,我只需要日志或特定设备中的信息,我知道我可以为每个设备调用一个回调“.on”,但我想要一种更简洁的形式来制作它,并且在文档中,有对此没有帮助。

也许我可以调用这样的方法

firebase.database("locations/{eachLocation}/logs/{eachDevice}").ref().on...

因为我不想要所有设备,问题是我不知道是否有表格可以制作谢谢。

【问题讨论】:

    标签: javascript ionic-framework firebase-realtime-database


    【解决方案1】:

    听起来您的数据嵌套过多。 Firebase 文档中有关于 avoiding nesting dataflattening data structures 的明确部分,并提供了有关如何防止这种情况的提示。

    乍一看,您至少需要两个顶级列表:locationslocationLogs。在每个下,您都拥有与现在相同的密钥,但日志现在位于 /locationLogs/$key 下,而不是 /locations/$key/logs 下。通过该更改,您可以获取某个位置的日志,而无需获取该位置的其他数据。


    如果您不知道位置键,但又不想获取所有位置的日志,这听起来像是您将另一个级别嵌套得太深了。 Firebase 查询适用于节点的平面列表,并且无法跨多个级别的未知键进行搜索。如果要搜索所有位置的所有日志,则需要保留所有日志的平面列表。然后,您可以通过将位置 ID 添加到每个日志来将每个日志绑定回其位置。

    所以这可能会导致以下结构:

    logs: {
      "adjustableLight....1": {
        locationId: "DTZB35",
        date: 156...,"
        ...
      }
    }
    

    【讨论】:

      【解决方案2】:

      实时数据库不支持您尝试执行的操作。没有通配符查询或占位符。您必须能够构建到要获取其数据的节点的完整路径。

      考虑更改数据结构,以便更轻松地找到所需节点。在 nosql 类型数据库中,将数据复制到更易于查询特定用例的结构中是很常见的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-07
        • 1970-01-01
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多