2017-01-13 90 views
0

火力地堡數據結構Firebase中的嵌套密鑰查詢?

{ 
    "books": { 
    "-KaKjMMw-WQltqxrGEmj": { 
     "categories": { 
     "cat1": true, 
     "cat2": true 
     }, 
     "author": "user1", 
     "title": "event1" 
    }, 
    "-KaKjMMw-WQltqxrGEmk": { 
     "categories": { 
     "cat1": true, 
     "cat2": false 
     }, 
     "author": "user1", 
     "title": "event2" 
    } 
    } 
} 

查詢來查找特定作者的所有書籍

FNode.testNode.child("books") 
    .queryOrderedByChild("author") 
    .queryEqualToValue("user1") 
    .observeEventType(.Value) { (snapshot) in 
    print(snapshot) 
} 

問:

我想找到所有的屬於到cat1。無法弄清楚這個問題。

+0

很抱歉更新了數據結構!稍微調整一下,通過更改鍵來隱藏我原來的數據目的。失敗嚴重。我的錯 ! :D –

回答

1

經過大量的打擊和審判,終於得到了我的答案。

對於上述結構。如果你想找到所有的屬於CAT1下面是該查詢:

FNode.testNode.child("books") 
    .queryOrderedByChild("categories/cat1").queryEqualToValue(true) 
    .observeEventType(.Value) { (snapshot) in 
    print(snapshot) 
} 

注:FNode.testNode可能是類型的任何節點FIRDatabaseReference

致Firebase團隊:您能否在數據結構中包含所有可能的Firebase查詢樣本,並將其與Firebase文檔一起提供。現在對我們來說,這是一種屢試不爽的方式。

+1

這可行,但意味着您需要爲每個類別[在Firebase安全規則中定義一個索引](https://firebase.google.com/docs/database/security/indexing-data)。對於更可維護的解決方案,請參閱我的答案:http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value –

+0

當然,這個鏈接。 –

+0

還有沒有把索引放在數據庫規則中查詢的缺點是什麼?它真的會很慢嗎? –