如何在Swift中过滤Firebase数据?

时间:2016-09-22 19:50:24

标签: ios swift firebase firebase-realtime-database

基本上,我有一个称为主题的结构,主题包含TitleDescriptionPublished标记(请参阅下面的屏幕截图以进行说明)。

Topics object in Firebase Database

在应用程序中,我想过滤数据,只显示published = true的主题。

这就是我要做的事情:

self.ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics")
        self.ref?.queryEqualToValue("published")
        self.ref?.observeEventType(.Value, withBlock: { (snapshot) in
            //...Handle Snapshot here
        })

但这不起作用。我该怎么做呢?在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:24)

你有一些小错误。总的来说没什么不好,但结合起来他们永远不会工作:

  1. 调用任何query...方法返回一个新对象
  2. 您需要orderByChild()才能过滤其值
  3. 你需要循环结果
  4. 结合这些:

    let ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics")
    let query = ref.queryOrderedByChild("published").queryEqualToValue(true)
    query.observeEventType(.Value, withBlock: { (snapshot) in
        for childSnapshot in snapshot.children {
            print(childSnapshot)
        }
    })
    

    我们定期收到这个问题。例如,昨天看起来很相似:Firebase Query not Executing Properly。由于我的解释因每个答案而异,因此我建议您浏览一下我的relevant answers,直至点击为止。

答案 1 :(得分:1)

self.ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics").
    queryOrderedByChild("published").queryEqualToValue(true)
    .observeEventType(.Value, withBlock: { (snapshot) in
    for childSnapshot in snapshot.children {
        print(snapshot)
    }
})

答案 2 :(得分:0)

使用此功能,您可以检查是否存在任何数据。

func checkUserExsistance(_ firURL : String ,_ childNode : String,_ value : String,_ ChildKey : String, completion : @escaping(Bool)->()){

     let DBRef = Database.database().reference(fromURL: firURL)

    let newDB =   DBRef.child(childNode).queryOrdered(byChild: ChildKey).queryEqual(toValue: value)
    newDB.observe(.value, with: { (snapPhot) in
        print(snapPhot.value)

    }) { (erooor) in
        print(erooor)
    }
}