子对象的Swift Firebase查询子对象
所以我在这里被困了半天,我正在尝试获取雅利娅的所有主题,但我很难做到这一点 这是Firebase中的示例结构子对象的Swift Firebase查询子对象,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,所以我在这里被困了半天,我正在尝试获取雅利娅的所有主题,但我很难做到这一点 这是Firebase中的示例结构 -Subjects -math id: 1 name: Math -students -Arya id: 1 name: Arya -JonSnow id: 2
-Subjects
-math
id: 1
name: Math
-students
-Arya
id: 1
name: Arya
-JonSnow
id: 2
name: JonSnow
+justsomename
+science
+english
+history
+computer
然后我找到了这个
我试过这个
ref.queryOrdered(byChild: "students/name").queryEqual(toValue: "Arya").observeSingleEvent(of: .value, with: { snapshot in
print(snapshot)
})
ref==受试者
但这是回报
Snap (subjects) <null>
Snap(主题)
这个问题正确吗?我只是做错了什么
也许是这样的。。。。可以工作
var subjects = [String]()
ref.observeSingleEvent(of: .value, with: { snapshot in
let value = snapshot.value as? NSDictionary
let postsIds = value?.allKeys as! [String] // this will put all the subjects such as math into an array called postIDs
for postId in postsIds { //this is going to cycle through the array and check each one for your student
let refToPost = Database.database().reference(withPath: "Subjects" + postId)
refToPost.observeSingleEvent(of: .value, with: { snapshot in
if snapshot.hasChild("Arya") {
self.subjects.append(snapshot)
}
})
}
})
print("this is the ist of subjects with my student: \(subjects)")
你想得到什么价值?我想得到一个叫Arya的学生的所有科目。@Mappeal你有没有试着把学生/姓名分开?我不知道这是否能解决问题,但我会尝试一下:
child(“学生”).queryOrdered(byChild:“name”).queryEqual(toValue:“Arya)”
。关于ref
,它指的是科目/-数学
?我认为这是因为你在寻找与学生平等的科目的子科目,但找不到子科目学生,因为这是另一个科目(如数学)的子科目。您需要让它检查每个主题子项(即数学)以获得查询。Firebase数据库查询可以通过已知路径的属性进行筛选。无法在动态路径中查询您正在尝试执行的属性。这意味着您需要修改数据模型,以允许进行所需的查询,例如,存储“每个学生的班级”的顶级列表。也可以看出这是可行的,但不是最佳实践。为什么?因为你在这里要做的是从节点读取所有结果,然后在手机上过滤掉它们。请记住,由于您阅读了所有数据,因此您可能会阅读几千个结果。您应该改为使用queryOrdered
,并在执行查询时过滤结果。这样,您将在响应中只得到很少的结果,而不是该节点内的所有结果。如果我们将refToPost.observeSingleEvent(of:.value,with:{snapshot in
更改为refToPost.queryOrdered(by child:“students/name”).queryEqual(toValue:“Arya”).observeSingleEvent(of:.value,with:{snapshot in
这是OP已经拥有的。但是的,这是正确的方法。我已经这样做了,但我担心这个解决方案,所以我正在寻找更好的方法。无论如何,谢谢。