我想从我的firebase-table中选择一个特定的名字(看看图片)。打印结果始终为空。所选名称应为" manni"。我的代码有什么问题?很多。
@IBAction func BTSelect(_ sender: Any) {
DBref = Database.database().reference()
let query = DBref?.queryOrdered(byChild: "name").queryEqual(toValue: "manni")
query?.observe(.value, with: { (snapshot) in
for childSnapshot in snapshot.children {
print("childSnapshot:-> \(childSnapshot)")
}
})
}
] 1
答案 0 :(得分:1)
你需要改变这个:
let query = DBref?.queryOrdered(byChild: "name").queryEqual(toValue: "manni")
到此:
let query = DBref?.queryOrdered(byChild: "-L5o1LyZRP3J_D-OiguB").queryEqual(toValue: "manni")
因为child: name
不等于manni
。 name
内的孩子等于manni。
P.S。:我可能复制了这个错误的-L5o1LyZRP3J_D-OiguB
子名称是父节点(不等于任何内容),所有具有randomid的节点都是子name
的子节点。
如果要检索多个值,则需要使用相同的键(键:值),然后执行以下操作:
您可以像这样更改数据库:
myapp2go-app
randomid
name:manni
randomid
name:manni
randomid
name:ulli
randomid
name:Test
randomid
name:alf
randomid
name:ulf
然后在你的查询中,保持这样:
let query = DBref?.queryOrdered(byChild: "name").queryEqual(toValue: "manni")
答案 1 :(得分:1)
如果每个子节点都有属性名称,则您使用queryOrdered(byChild: "name")
。但在您的情况下,您要查询名为name
的节点,并希望过滤子节点的值。为此,请使用queryOrderedByValue
:
let query = DBref?.child("name").queryOrderedByValue).queryEqual(toValue: "manni")
首先对name
的子节点的值进行排序,然后只返回匹配manni
的节点。