2016-05-30 55 views
0

我在我的Firebase數據庫中有一個名爲「users」的密鑰,其中包含電子郵件和名稱的密鑰。我試圖創建一個簡單的查詢,它將根據電子郵件地址查找用戶,但查詢不會返回任何結果。Firebase查詢無法找到電子郵件地址?

let rootRef = FIRDatabase.database().reference() 
let email = emailTextField.text 

rootRef.child("users").queryEqualToValue(email, childKey: "users").observeEventType(.Value, withBlock: { snapshot in 
     if snapshot.exists() { 
      print("user exists") 

     } else if !snapshot.exists(){ 
      print("user doesn't exist") 

     } 
    }) 

即使電子郵件文本字段與我的數據庫中顯示的內容相同,我的控制檯始終打印「用戶不存在」。

有什麼不對?

謝謝!

回答

2

試試這個:

let usersRef = self.rootRef.childByAppendingPath("users") 
let email = emailTextField.text 

usersRef.queryOrderedByChild("email").queryEqualToValue(email) 
       .observeEventType(.Value, withBlock: { snapshot in 
    if snapshot.exists() { 
      print("user exists") 

    } else { 
      print("user doesn't exist") 

    } 
}) 

你必須要小心,雖然... .value的將返回有一個電子郵件地址,等於你正在尋找一個所有節點。一般情況下,如果有5個,那麼值就是1,.Value將包含全部5個,所以迭代快照會更安全。

for child in snapshot.children { 
    let email = child.value["whatever key:value you want"] as! String 
} 
+0

謝謝!這很好。感謝關於迭代快照的額外提示。像魅力一樣工作。 – winston

+0

對不起,還沒有添加到這裏。我如何獲得快照的ID? 'print(snapshot.key)'返回「用戶」,而不是像「12EEWekLr5bqb4J9GilGvKjgWmp1」這樣的實際用戶ID。我可以很容易地通過'child.value [「email」]得到用戶郵件,但實際的用戶ID不是我可以抓取的命名元素。 – winston

+1

@james沒問題,簡單的答案。請記住,當使用.Value進行查詢時,您應該使用我的答案中的第二個代碼片段遍歷快照中返回的子項。在該片段中,要訪問任何特定字段,請使用* let name = child.value [「name」] as!串*。要訪問每個孩子的密鑰,請使用* let key = child.key作爲字符串!* – Jay

相關問題