我要使用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"
中存储的所有内容?
真的很感激此事。
亲切的问候, 乔治
答案 0 :(得分:0)
我将提出这个答案,专门回答这个问题
如何通过查询来获取存储在“ 1”中的所有内容 Firebase?
答案是;如果您知道所需数据的路径,则无需查询。
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.
指向 my Firebase的根,您将其设置为指向您使用的任何父节点。