2016-11-08 198 views
0

這的孩子的問題在這裏的副本:Querying in Firebase by child of child斯威夫特火力地堡查詢由孩子

有兩個答案是相同,但都沒有實際工作。我只是回答答案,但我沒有這樣的聲譽 - 所以我需要問另一個問題(stackOverflow失敗 - 我可以氾濫網站的倍數,但我不能告訴別人他們的答案不起作用!?)

我正在開發一個使用組的Firebase應用程序。每個組的結構是這樣

groups : { 
    "-KW5C5pS_OsWqS8_SLDy" : { 
    "key" : "-KW5C5pS_OsWqS8_SLDy", 
    "name" : "Test", 
    "users" : { 
     "uFpUrVFafVgVFsQudTNpOquIJZE2" : true 
    } 
    } 
} 

我希望能夠查詢具有當前用戶無論是真或假,則表示如果他們有管理員權限或沒有的uid組。現在我的查詢看起來是這樣的:

FIRDatabase.database().reference() 
     .child("groups").queryOrdered(byChild: "users/" + uid).queryEqual(toValue: writable) 

這是相同的東西被張貼作爲回答其他問題,並說了個遍,它的作品 - 但它沒有返回值!

這是一個錯誤還是我做錯了什麼?

回答

0

好了 - 我發現我的問題。我已經制定了一條規則,允許我只閱讀我所屬的組 - 但顯然這對於​​當前的Firebase規則語言來說是不可能的,因爲您需要能夠讀取整個目錄才能查詢它。我改變了規則,允許所有經過身份驗證的用戶閱讀所有組,並解決了這個問題 - 儘管這不是理想的安全措施。

我花了這麼長時間才弄清楚這一點,因爲它沒有給我一個在日誌中拒絕錯誤的權限 - 它只是給了我一個空的查詢。

+0

如果您想要處理代碼中的權限被拒絕錯誤,您可以使用'observe'方法的'withCancelBlock'變體。無論如何,這對未來的查詢來說可能是個好主意。 – vzsg

0

我認爲你的查詢是正確的,你忘了觀察:

FIRDatabase.database().reference() 
    .child("groups").queryOrdered(byChild: "users/" + uid).queryEqual(toValue: writable).observe(FIRDataEventType.value, with: { (snapshot) in 
// Do what you need with your snapshot here 
// check if the snapshot is different from nil 
}) 
+0

我將這個傳遞給FUIArray - 它爲我觀察。我使用單個子項時沒有問題,例如:query:FIRDatabase.database()。reference()。child(「groupdata」)。child(group.key).child(「items」)。queryOrdered(byChild:「父母列表「)。queryEqual(toValue:list.key) - 它只有在使用」users /「+ uid時,我有問題 –

+0

我也嘗試將字符串更改爲等同的」users/\(uid)「 - 相同的結果。 –

相關問題