使用queryOrdered(byChild:" name")queryEqual选择Firebase数据

时间:2018-02-20 18:29:32

标签: ios firebase firebase-realtime-database swift4

我想从我的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)")
        }
    })

}

![enter image description here] 1

2 个答案:

答案 0 :(得分:1)

你需要改变这个:

let query = DBref?.queryOrdered(byChild: "name").queryEqual(toValue: "manni")

到此:

let query = DBref?.queryOrdered(byChild: "-L5o1LyZRP3J_D-OiguB").queryEqual(toValue: "manni")

因为child: name不等于manniname内的孩子等于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的节点。