这应该很简单,并且有很多类似的问题,但对我来说没有任何作用。
这是我的代码,应该打印快照但不是。
override func viewDidLoad() {
super.viewDidLoad()
let Ref = Database.database().reference(withPath: "Exhibitors-List/join").queryOrdered(byChild: "joinID").queryEqual(toValue:"1-22")
ref.observe(.value, with: {
snapshot in
var newItems: [Exhibitors] = []
for item in snapshot.children{
print(snapshot.value as Any)
let joinItem = Exhibitors(snapshot: item as! DataSnapshot)
newItems.append(joinItem)
}
self.items = newItems
self.tableView.reloadData()
})
}
在idComp或boothLocation中搜索一个孩子而不是在joinID中搜索一个孩子时,我没有问题,那么它是我的代码还是我的Firebase结构关闭了?
答案 0 :(得分:1)
当您在某个位置运行查询时,Firebase会检查该位置的每个子项以查找您订购的属性。 Exhibitors-List/join
中没有数据,因此查询没有结果。
相反,您想要做的是在Exhibitors-List
上运行查询,然后在join/joinID/0
上订购/过滤:
let Ref = Database.database().reference(withPath: "Exhibitors-List/join").queryOrdered(byChild: "joinID/0").queryEqual(toValue:"1-22")
这样可行,但前提是您在索引0
中拥有所需的joinId。
您实际上要做的是在此处进行反向查找。您当前的数据结构有助于查找给定参展商的连接ID。找到现有参展商的加入ID并不好。为了有效地实现这一点,您需要创建一个额外的数据结构:
joinIds: {
joinId1: {
exhibitorId1: true,
exhibitorId2: true
},
joinId2: {
exhibitorId2: true
}
}
通过这种额外的结构,您可以从/joinIds/1-22
快速查找参展商ID。
答案 1 :(得分:0)
您的代码要求查询位置Exhibitors-List/join
,但您的数据库中不存在该位置。据我所知,还有另一个节点0
位于Exhibitors-List
和最近的join
子节点之间。查询时不能跳过元素 - 您需要在完全存在的路径上查询。
答案 2 :(得分:0)
override func viewDidLoad() {
super.viewDidLoad()
let textj = "join/"
let text = textj + detailNamer!
let Ref = Database.database().reference(withPath: "Exhibitors- List").queryOrdered(byChild:text).queryEqual(toValue:1)
Ref.observe(.value, with: {
snapshot in
var newItems: [Exhibitors] = []
for item in snapshot.children{
print(snapshot.value as Any)
let joinItem = Exhibitors(snapshot: item as! DataSnapshot)
newItems.append(joinItem)
}
self.items = newItems
self.tableView.reloadData()
})
}