我有一些虚拟数据,我正在尝试使用Swift查询存储在Firebase (实时数据库)中的数据,我对此有点新手,所以我会很感谢您的帮助。
{
"Site-List" : {
"1" : {
"address" : "test1",
"latitude" : 0,
"live" : false,
"longitude" : 0,
"siteName" : "Test1"
},
"2" : {
"address" : "test2",
"latitude" : 0,
"live" : false,
"longitude" : 0,
"siteName" : "Test2"
}
}
}
var sites: [SiteList] = []
findSite("1")
print(sites)
func findSite(id: String) {
let ref = Database.database().reference().child("Site-List")
ref.observe(.value, with:{ (snapshot: DataSnapshot) in
var newItems: [SiteList] = []
for child in snapshot.children {
if let snapshot = child as? DataSnapshot,
let siteList = SiteList(snapshot: snapshot) {
for site in siteList.key {
if String(site) == "1" {
newItems.append(siteList)
}
}
}
}
self.sites = newItems
})
}
我如何才能通过查询Firebase来获取存储在"1"
中的所有内容?
真的很感谢在这件事上的任何帮助或帮助。
致以良好的问候,乔治
发布于 2019-06-05 03:11:07
我将给出这个具体回答这个问题的答案。
如何通过查询Firebase来获取存储在"1“中的所有内容?
答案是:如果您知道所需数据的路径,则不需要查询。
func readSite() {
let site1Ref = self.ref.child("Site_List").child("1")
site1Ref.observeSingleEvent(of: .value, with: { snapshot in
let address = snapshot.childSnapshot(forPath: "address").value as? String ?? "No address"
let name = snapshot.childSnapshot(forPath: "siteName").value as? String ?? "No site name"
print(address, name)
})
}
输出结果将是
test1 Test1
也就是说,如果你真的想要查询,你需要知道你想要查询什么。例如,假设您想要查询值为test1的所有地址
func querySite() {
let sitesRef = self.ref.child("Site_List")
let queryRef = sitesRef.queryOrdered(byChild: "address").queryEqual(toValue: "test1")
queryRef.observeSingleEvent(of: .value, with: { snapshot in
for snap in snapshot.children.allObjects as! [DataSnapshot] {
let address = snap.childSnapshot(forPath: "address").value as? String ?? "No address"
let name = snap.childSnapshot(forPath: "siteName").value as? String ?? "No site name"
print(address, name)
}
})
}
输出结果将是
test1 Test1
如果有多个结果,则会全部打印出来。
对于这个查询,我使用的是.value,它可以在快照中返回多个子快照结果,因此需要迭代快照以处理返回的每个子快照。
请注意,在我的回答中,代码self.ref.
指向我的Firebase的根,您可以将其设置为指向您使用的任何父节点。
https://stackoverflow.com/questions/56433863
复制相似问题