这是我的树:
我想获得d
值("its d"
)
但我没有打印任何信息
ref.queryOrderedByChild("userA")
.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if snapshot.exists() {
for child in (snapshot.value?.allValues)! {
if let fruits = child["c"] as? [String:String]{
let name = fruits["d"]
print(name)
}
}
答案 0 :(得分:1)
这是具体问题的答案:
获取信息,无论Firebase中的孩子数量
不确定这是不是你想要的。
要进入'd',您不需要查询。您可以直接访问该数据。
这是我的结构(与你的相匹配)
"the_users" : {
"a" : {
"b" : {
"c" : {
"d" : "It's d"
}
}
}
}
以及获取'd'值的代码
let theUsersRef = rootRef.child("the_users")
let dRef = theUsersRef.child("a/b/c/d")
dRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
let msg = snapshot.value as! String
print(msg)
})
和输出
It's d
答案 1 :(得分:0)
当您调用queryOrderedByChild("userA")
时,它会告诉数据库按userA
属性的原始值排序。由于在您的JSON中没有具有原始值的userA
属性,因此order by语句没有意义。
您不会过滤查询中的数据,因此您将获得包含附加侦听器的位置的所有数据的快照。从您的代码示例中不清楚它是什么位置,但它很可能在JSON树中比在孩子c
存在时更高。这意味着你不打印任何名字。
如果你简单地打印所有孩子,可能会更清楚:
ref.queryOrderedByChild("userA")
.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if snapshot.exists() {
for child in (snapshot.value?.allValues)! {
print(child.key)
if let fruits = child["c"] as? [String:String]{
let name = fruits["d"]
print(name)
}
}
}
})