2017-10-16 67 views
1

我的模式設置如下。搜索具有唯一密鑰陣列的Firebase查詢

enter image description here

現在我要發送的字符串chinohills7leavescafe101191514.19284並要檢查是否有在Chino Hills或沒有任何字符串。 我很困惑,使任何搜索查詢,因爲我沒有存儲固定的上述字符串childKey 我知道架構應該是這樣的,但我不能改變架構。

leaves-cafe 
    codes 
     Chino Hills 
      -Kw0ZtwrPjyNh1_HJrkf 
       codeValue: "chinohills7leavescafe101191514.19284" 
+0

請顯示您嘗試過的一些代碼,並顯示'Chino Hills'的擴展結構的任何子鍵? – 3stud1ant3

回答

2

您正在尋找queryOrderedByValue。它與queryOrderedByChild的工作方式相同,並允許您使用queryEqualToValue來實現您所需的結果,因爲您無法更改當前的架構。

下面是一個例子

// warning: untested code - just illustrating queryOrderedByValue 

let ref = Database.database().reference().child("leaves-cafe").child("codes").child("Chino Hills") 
let queryRef = ref.queryOrderedByValue().queryEqual(toValue: "chinohills7leavescafe101191514.19284") 

queryRef.observeSingleEvent(of: .value, with: { (snapshot) in 
    if snapshot.exists() { 
     print("value does exists") 
    } else { 
     print("value doesn't exist") 
    } 
}) 

你的替代選擇是遍歷所有節點並檢查是否值手動存在如3stud1ant3建議。但是請注意,這種方法既費錢又有安全風險。你會下載大量的數據,一般你不應該在設備上加載不需要的數據(特別是如果他們是敏感信息,不知道是否是你的情況);這相當於從數據庫中下載所有密碼以檢查輸入的密碼是否與給定用戶匹配。