使用Firebase和Swift 3进行一对多查询
问题描述:
我有一个应用程序,它包含主题和类别,一个类别可能属于一个或多个主题,我试图过滤数据以仅显示具有某个主题的类别ID标记为真,这是结构:
使用Firebase和Swift 3进行一对多查询
这里是(这是工作的雨燕2.3)的代码,我想出了:
self.ref = FIRDatabase.database().reference(fromURL: FIREBASE_URL).child("categories")
let query = ref?.queryOrdered(byChild: "topics/idt2").queryEqual(toValue: true)
query!.observe(.value, with: { (snapshot) in
//This should bring back both categories, Soccer and Moon
print("Inside query \(snapshot.value)") // Prints null
})
任何想法?
答
当您对Firebase数据库执行查询时,可能会有多个结果。所以快照包含了这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。
你需要在你的回调块来处理这个名单:
query!.observe(.value, with: { (snapshot) in
for child in snapshot.children {
print(child.key)
}
})
另见:
+1
再次感谢您的帮助,只是一点细节,这段代码在Swift 3.0中不起作用,如果我错了,请纠正我的错误,但现在要使用快照中的值,首先将它转换为NSDictionary或NSArray,像这样:http://pastebin.com/f7q8kbvJ –
Fox下一个问题:您已经在您的问题中包含了JSON树的图片。请用实际的JSON替换为文本,您可以通过点击Firebase数据库控制台中的导出按钮轻松获取。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –