2016-09-22 104 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) 
    } 
})