如何在auto id child中使用queryEqualToValue检索数据。火力地堡-IOS

时间:2016-09-06 14:44:11

标签: swift firebase firebase-realtime-database

作为我的问题。当我尝试使用带有自动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)
}

3 个答案:

答案 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)
}