2017-06-19 22 views
1

Ich bin mit Firebase und meine Datenbank sieht wie folgt aus:abrufen Firebase Daten ein bestimmtes Feld gegeben

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

Wie kann ich die E-Mail zum Beispiel abrufen, da der Anzeigenamen mit Swift 3? (ZB wenn ich Name1 wissen, werden die abgerufenen Daten [email protected] sein.)

+0

In Verbindung stehend: https://stackoverflow.com/questions/43971814/firebase-querying-for-unique- username-swift –

+0

Ich verstehe, wie Sie alle Daten erhalten, wo ich den Anzeigenamen finde, aber ich weiß nicht, wie man das genaue Feld mit der E-Mail erreicht. Ich meine, was muss ich neben "snapshot.value" schreiben? @NiravD – alecs09

+0

@begood Bitte überprüfen Sie, ob meine Antwort unten ist, was Sie wollten ... –

Antwort

0

Implementieren Sie die folgende Hilfsfunktion:

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) 
    } 
} 

und es wie folgt verwendet werden:

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

Verwenden Feuerbasis, wie unten

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

Ich denke, OP ist nach einer * Abfrage *, die bekommen, was er will. Bitte sehen Sie meine Antwort für eine Alternative ... –

Verwandte Themen