以下是我在firebase中的数据库设计
- Sports
- MainCategory (hypothetical category name)
- SubCategory1
- K_tgbBt6Vx0-kkg7e63
- name:football
- K_tgbBt6Vx0-kkg7a99
- name:golf
- Subcategory2
- K_tgbBt6Vx0-kkgad21
- name:Snooker
- K_tgbBt6Vx0-kkg7e00
- name:Table Tennis
- MainCategory2
- SomeOtherSubCategory1
-K_tgbBt6Vx0-kkg7e00
我的目标:获取体育节点下的所有体育项目并在uicollectionview中按类别(即MainCategory和Sub类别)显示它们,并允许用户选择他所选择的体育项目。
EG。显示
主要类别1
子类别1
足球,高尔夫
SubCategory2
乒乓球,斯诺克
主要类别2
SomeOtherSubCategory1
曲棍球,网球
以下方法只让我在节点中更深一层
rootref.child("sports").observe(.value, with: { (snapshot) in
let mainCategory = snapshot.key
for child in snapshot.children{
print(child)
}})
rootref.child("sports").observe(.childAdded, with: { (snapshot) in
let mainCategory = snapshot.key
let mySnapshot = snapshot.value! as! NSDictionary
}) { (error) in
print(error.localizedDescription)
}
此外,如果我有其他方式可以构建我的数据库,请告诉我
答案 0 :(得分:1)
`rootref.child("sports").observe(.value, with: { (snapshot) in
//This gets your mainCategory names
let mainCategory = snapshot.key
for child in snapshot.children{
print(child)
}})
rootref.child("sports").observe(.childAdded, with: { (snapshot) in
let mainCategory = snapshot.key
let mySnapshot = snapshot.value! as! NSDictionary
}) { (error) in
print(error.localizedDescription)
}
//Now what you need to do is another snapshot to get the sub categories. It would be something like this:
rootref.child("sports").child("Sub-Category").observe(.value, with: { (snaps) in
//Same steps as you did above
})
`
答案 1 :(得分:1)
很高兴知道像你一样拥有2.5k代表的男人正在问这样一个问题。我假设您了解MVC,当然将来,您需要一个可重用的服务类来处理Firebase请求,而模型类来处理数据。
接下来,您应该了解在Firebase上观察数据的不同方法。 单一事件和类型事件。阅读文档:https://firebase.google.com/docs/database/ios/read-and-write
在构建数据库时,Firebase也有一个文档:https://firebase.google.com/docs/database/web/structure-data
无论如何,我为你做了一个样品,看看: http://www.jsoneditoronline.org/?id=5d9e7067883a538746ace7cdd9e81ebb
我使用 jsoneditoronline 网站创建了一个新结构,我相信这是一个更好的数据库结构。尽可能避免使用这么多嵌套节点。查看我的示例,我创建了必要的新节点,以便更快,更轻松地获取数据。例如,如果您要查看上面的链接并下载数据库并将其上传到Firebase数据库,您将看到如下结构:
正如您所看到的,我在这里有一个名为 subcategories-sportId 的父节点,它具有不同子类别的子节点以及每个子类别,我们有运动的ids。
另一个例子,如果我们想要获得子类别2下的所有体育项目,我们将不会使用 sport 节点内的数据。 (见下图)但相反,我们将检查 subcategories-sportid 节点内的数据。获取对该节点的引用,并添加特定子类别字符串的子节点,然后获取所有 sportsIds 。枚举 sportsIDs ,最后获取每项运动的主要数据。
但是如果我们想获得特定运动的所有子类别和主要类别,我们可以使用运动节点内的数据(见上图)
答案 2 :(得分:1)
let cat3 = db.child("API Questions").child("Category3").child("Name")
cat3.observe(FIRDataEventType.value, with:
{ (snapshot) in
let eventDataloc = snapshot.value as? [String: AnyObject] ?? [:]
// self.Cat3Qarray.removeAllObjects()
for (_, value) in eventDataloc
{
let studsmodel = FirebaseStructureCustVM.updateQuestionData(Questiondata: value as![String:Any])
self.Cat3Qarray.add(studsmodel)
//print(studsmodel)
}
self.tableview1.reloadData()
//print snapshot here
})
答案 3 :(得分:1)
在下面,如果我们想获得MaxMarks的“Category1”数据,“API问题”是“根”,“Category1”是该根的“子”:“20”,Q:“一般信息“,Qid:”问题1“所以你可以像这样打印快照=== print(”cat1 =(快照)的快照“)===你将获得Category1内的所有数据
let cat2 = db.child("API Questions").child("Category1")
cat2.observe(FIRDataEventType.value, with:
{ (snapshot) in
let eventDataloc = snapshot.value as? [String: AnyObject] ?? [:]
for (_, value) in eventDataloc
{
let studsmodel = FirebaseStructureCustVM.updateQuestionData(Questiondata: value as![String:Any])
}
print((snapshot))
})