查询未知父firebase的子快照
Posted
技术标签:
【中文标题】查询未知父firebase的子快照【英文标题】:Query child snapshot of unknown parent firebase 【发布时间】:2019-07-18 09:33:33 【问题描述】:我正在尝试使用未知父级的 childKey 获取子级快照,而不更改数据结构。
我尝试将queryOrderByChildId
与queryEqual(toValue:, childKey:)
一起使用,但我的问题是子快照是字典,我只知道键,不知道值。
有什么方法可以将值操作为 Any 值,以便我能够获取子快照。
我知道title/id1、id3和id3的时间戳
数据结构:
title:
id1:
id2:
id3:
timestamp: 101010101
visible: true
代码:
ref.child("title").child(id1).queryOrderedByKey().queryEqual(toValue: _, childKey: id3)
.observeSingleEvent(of: .value) (snapshot) in
print(snapshot)
输出值为空
编辑:
最后我这样解决了:
ref.child("title").child("id1").queryOrdered(byChild: "id3/timestamp").queryEqual(toValue: 101010101).observeSingleEvent(of: .value) (snapshot) in
print("id2 is: ", (snapshot.value as? [String: Any])?.keys.first)
【问题讨论】:
【参考方案1】:Firebase 数据库查询在您运行查询的位置的直接子节点上运行。整个路径中只能有一个未知键:您查询的节点正下方的节点。
因此,如果您知道路径的title/id1
部分,则可以根据其下已知路径(如date/month
)处的键、值或属性查询级别id2
上的节点。
如果知道title/id1/id2
,可以查询id3
级别的节点。但是你不能查询那些,如果你只知道他们路径的title/id1
部分。
另见:
Firebase Query Double Nested Firebase query if child of child contains a value【讨论】:
好的,谢谢,假设我知道 title/id1、id3 和 id3 的时间戳,我的查询应该是什么样子才能获得 id3 datasnapshot.value? @坦率 如前所述:查询中只能有一个未知级别。如果你只知道title/id1
,那么你是在尝试查询title/id1/*/*/timestamp
,这是不可能的。
正如我提到的,我也知道 id3 的值 和时间戳的值。这有帮助吗?我知道title/id1/*/id3/timestamp
@frank
我不知道只有 id2 @Frank 的值
如果id3/timestamp
是固定路径,您可以在id1
下为其创建索引,并以这种方式查询。但是如果id3
对于许多子节点来说是不同的,那就是分类问题。在这种情况下,请检查我对链接的第二个问题的回答。请注意,如果您不使用id1
、id2
和id3
将问题抽象化,而是显示实际值及其含义,则更容易理解您正在尝试的内容以及如何完成。以上是关于查询未知父firebase的子快照的主要内容,如果未能解决你的问题,请参考以下文章
当数据存在时,Swift firebase 快照返回 null