2016-05-30 1 views
0

Ich habe einen Schlüssel in meiner Firebase-Datenbank namens "Benutzer", die Schlüssel für E-Mail und Name enthalten. Ich versuche, eine einfache Abfrage zu erstellen, die einen Benutzer anhand der E-Mail-Adresse findet, aber die Abfrage gibt keine Ergebnisse zurück.Firebase-Abfrage kann E-Mail-Adresse nicht finden?

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

     } 
    }) 

Meine Konsole immer druckt „Benutzer existiert nicht“, auch wenn das E-Mail-Textfeld ist identisch zu dem, was in meiner Datenbank angezeigt wird.

Irgendwelche Ideen, was ist los?

Danke !!

Antwort

2

Try this:

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

    } 
}) 

Sie müssen jedoch vorsichtig sein ... .Wert alle Knoten zurück, die eine E-Mail-Adresse gleich dem einen haben Sie suchen. Im Allgemeinen wäre das jedoch eins, wenn es 5 gibt. Der Wert enthält alle 5, so dass es sicherer wäre, über den Schnappschuss zu iterieren.

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

Vielen Dank !! Das hat super funktioniert. Danke für den zusätzlichen Tipp bezüglich der Wiederholung des Snapshots. Lief wie am Schnürchen. – winston

+0

Entschuldigen Sie, um hinzuzufügen. Wie kann ich die ID des Snapshots erhalten? 'print (snapshot.key)' gibt "Benutzer" zurück und nicht die tatsächliche Benutzerkennung wie "12EEWekLr5bqb4J9GilGvKjgWmp1". Ich kann die Benutzer email mit 'child.value [" email "]' leicht erhalten aber die tatsächliche Benutzer-ID ist nicht ein benanntes Element, das ich ergreifen kann. – winston

+1

@james Kein Problem und eine einfache Antwort. Denken Sie daran, dass Sie beim Abfragen von .Value die in dem Snapshot zurückgegebenen unter Verwendung des zweiten Codeausschnitts in meiner Antwort durchlaufen sollten. Innerhalb dieses Snippets, um auf bestimmte Felder zuzugreifen, verwenden Sie * let name = child.value ["name"] als! Zeichenfolge *. Um auf den Schlüssel für jedes Kind zuzugreifen, verwenden Sie * let key = child.key als String! * – Jay