2016-09-22 52 views
7

基本上,我有一个称为主题的结构,其中包含Title,DescriptionPublished标志(请参阅下面的屏幕截图以进行说明)。如何过滤Swift中的Firebase数据?

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

但是,这是行不通的。我应该如何处理这个问题?先谢谢您的帮助。

回答

16

你有一些小错误在那里。总体没有什么太糟糕,但结合他们永远不会工作:

  1. 调用任何query...方法返回一个新的对象
  2. 你需要orderByChild()之前,你可以在它的值过滤
  3. 你需要循环在结果

结合这些:

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,直到它被点击。

+0

就是这样!再次感谢弗兰克的帮助! –

+0

如果数据嵌套更深层次,它仍然是可能的。例如,如果在“已发布”下有一个具有真/假值的键列表。你想按'/ published/key1 = true'来过滤这是我遇到的问题。 –

+0

我试过这个,但我收到所有的孩子值,不只是通过查询条件的唯一。我使用.childAdded和queryStarting(at :)。提前感谢任何指针。 – Septronic

0
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) 
    } 
})