作为我的问题。当我尝试使用带有自动ID密钥的“queryEqualToValue”时,我无法从firebase检索数据。
self.ref.child(..my child..).queryOrderByChild("name").queryEqualToValue("my name")
自动子ID高于子“name”。
编辑:为我的json树
我的真实数据不喜欢这个,但这是例如结构。 我真的想检查等于“名字”。
这是我的代码
let ref = FIRDatabase.database().reference()
ref.child("Students").queryOrderedByChild("name").queryEqualToValue("Jason bourne").observeEventType(.Value, withBlock: { snapshot in
print("value : " + snapshot.value)
}
答案 0 :(得分:5)
鉴于您的实时数据库看起来像这样:
{
"students": {
1: {
"name": {
"first_name": "Nathapong",
"nick_name": "Oniikal3"
}
}
}
}
您可以使用事件类型ChildAdded
观察学生路径,并按子键name/first_name
对查询进行排序。然后,您可以使用queryEqualToValue
查找具有特定名字的学生。
let ref = FIRDatabase.database().referenceWithPath('students').queryOrderByChild("name/first_name").queryEqualToValue("Nathapong")
ref.observeSingleEventOfType(.ChildAdded, block: { snapshot in
print(snapshot)
})
答案 1 :(得分:0)
在使用子查询之前,您需要在数据库规则中使用".indexOn":["name"]
指定此项。有关示例,请参阅documentation
{
"rules":{
".write": "true",
".read": "true",
"Students": {
"$key": {
".indexOn":["name"]
}
}
}
}
您的读/写规则可以放在您需要的地方。与.indexOn
.validate
就像另一条规则
答案 2 :(得分:0)
此代码应该有效。如果我犯了任何错误并检查您的数据,请检查姓名。
self.ref.child("Students").child("name").queryOrderedByChild("first name").queryEqualToValue("my name").observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in
print(snapshot.value)
}