2017-06-19 65 views
1

我使用火力地堡和我的数据库看起来是这样的:找回火力地堡数据给出了具体的领域

Users 
    user1 
     email: "[email protected]" 
     password: "pass1" 
     display name: "Name1" 
    user2 
     email: "[email protected]" 
     password: "pass2" 
     display name: "Name2" 

如何取回例如电子邮件,给出了使用斯威夫特3的显示名称? (例如,如果我知道Name1,检索到的数据将[email protected]。)

+0

相关:https://stackoverflow.com/questions/43971814/firebase-querying-for-unique- username-swift –

+0

我知道如何获取所有显示名称的数据,但我不知道如何通过电子邮件到达确切的字段。我的意思是除了“snapshot.value”之外还需要写些什么? @NiravD – alecs09

+0

@begood请检查我的答案是否是你之后的... –

回答

0

实现下面的辅助功能:

func queryEmail(of displayName: String, completion: @escaping (String?) -> Void) { 
    let users = FIRDatabase.database().reference().child("Users") 
    let query = users.queryOrdered(byChild: "display name").queryEqual(toValue: displayName) 
    query.observeSingleEvent(of: .value) { 
     (snapshot: FIRDataSnapshot) in 
     guard snapshot.exists() else { 
      completion(nil) 
      return 
     } 
     let users = snapshot.children.allObjects as! [FIRDataSnapshot] 
     precondition(users.count == 1, "Display name isn't unique!") 
     let userProperties = users.first!.value as! [String: Any] 
     completion(userProperties["email"] as? String) 
    } 
} 

,并使用它像这样:

queryEmail(of: "Name1") { 
    (email) in 
    if let email = email { 
     print("Name1 email is \(email)") 
    } else { 
     print("Email not found") 
    } 
} 
1

使用火力如下

let dbstrPath : String! = "Users/user1" 
self.dbRef.child(dbstrPath).observeSingleEvent(of: .value, with: { (snapshot) in 
    if snapshot.exists(){ 
     print(snapshot.value!) 
     // Here you got user value in dict 
    } 
}) 
+0

我认为OP是在* query *之后得到他想要的。请参阅我的答案以获得替代方案... –