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

如何在没有外部节点名称的情况下获取内部节点中的 firebase 数据?

如何在没有外部节点名称的情况下获取内部节点中的 firebase 数据?

白猪掌柜的 2023-01-06 10:59:00
我想从 ref 中的 firebase 读取数据,("locations/{{someLocation}}/logs/{{someDevice}}") 但我不知道是否存在正确的表格,因为我需要使用“.on”来不断听到所有设备的变化,问题是我需要阅读所有设备在所有位置的日志中,但我不需要其他信息,我只需要日志或特定设备中的信息,我知道我可以为每个设备调用一个回调“.on”,但我想要一个更干净的制作它的表格和文档中,对此没有帮助。也许我可以调用这样的方法firebase.database("locations/{eachLocation}/logs/{eachDevice}").ref().on...因为我不想要所有的设备,问题是我不知道是否有表格可以制作它谢谢。
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

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

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


如果您不知道位置键,但不想获取所有位置的日志,听起来您嵌套的另一个级别太深了。Firebase 查询在节点的平面列表上工作,并且无法跨多个级别的未知键进行搜索。如果要搜索所有位置的所有日志,则需要保留所有日志的平面列表。然后,您可以通过将位置 ID 添加到每个日志来将每个日志与其位置相关联。

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

logs: {

  "adjustableLight....1": {

    locationId: "DTZB35",

    date: 156...,"

    ...

  }

}


查看完整回答
反对 回复 2023-01-06
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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

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

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

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


查看完整回答
反对 回复 2023-01-06
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

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