首页 > 解决方案 > 如何在没有外部节点名称的情况下获取内部节点中的 Firebase 数据?

问题描述

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

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

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

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

数据库

标签: javascriptionic-frameworkfirebase-realtime-database

解决方案


听起来您的数据嵌套太多了。Firebase 文档有关于避免嵌套数据扁平化数据结构的明确部分,并提供了有关如何防止这种情况的提示。

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


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

因此,这可能会导致以下结构:

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

推荐阅读