Try this ...
eine Struktur annehmen (diese Swift 2, Firebase 2)
users
uid_0
email: "[email protected]"
displayName: "some display name"
und wir wollen uid_0 Infos über
let displayName = "some display name"
usersRef.queryOrdered(byChild: "displayName").queryEqual(toValue: displayName)
.observeSingleEvent(of: .childAdded) { (snapshot: FIRDataSnapshot) in {
let dict = snapshot?.value as! [String: AnyObject]
let email = dict["email"]
let displayName = dict["displayName"]
print(email!)
print(displayName!)
let key = snapshot?.key
print(key!)
}
ein paar Dinge erhalten, note
Die Variable 'dict' wird angewiesen, ein Wörterbuch vom Typ [Str ing: Anyobject].
Jedes Objekt könnte, sei jedes Objekt. Ein String, ein anderes Wörterbuch, ein int. Sie müssen also sicherstellen, dass der Code mit dem Objekt umgehen kann.
Der Snapshot-Schlüssel ist in diesem Fall der Snapshot dieses Benutzers und der Schlüssel muss der übergeordnete Knoten sein, in diesem Fall uid_0. So ist der Ausgang
[email protected]
some display name
uid_0
EDIT:
4 für Firebase aktualisiert, Swift 4 und den Fall behandeln, in denen mehrere Kinder zurückgegeben werden
let usersRef = self.ref.child("users")
let input = "some display name"
let query = usersRef.queryOrdered(byChild: "displayName").queryEqual(toValue: input)
query.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let email = dict["email"] as! String
let displayName = dict["displayName"] as! String
print(email)
print(displayName)
let key = snapshot.key
print(key)
}
})
Dies funktioniert nicht. Das ist in Ordnung, wenn Sie einen einzigen Datensatz haben. Wie würdest du es finden, wenn du uid_0 und uid_1 hättest und die gesuchte Email in uid_1 ist?Die UIDs werden automatisch generiert und Sie kennen sie nicht, müssen aber die Kinder suchen, um die E-Mail zu finden und den Datensatz zurückgeben. – justdan0227
@ justdan0227 Es funktioniert! Der Code wurde getestet. Du bist jedoch * Use Case * ist anders als das, was in der Frage war. Das OP fragt, wie man die UID bekommt, sobald der Knoten gefunden wurde, und mein Code adressiert, wie man diese UID erhält (was der Snapshot? .key ist), vorausgesetzt, dass jeder Knoten einen diskreten Benutzernamen und eine E-Mail hat. Mein Code macht das. Wenn jedoch mehrere Ergebnisse möglich sind, gibt die Abfrage einen Snapshot zurück, der alle übereinstimmenden Knoten enthält. Sie würden dann über den Schnappschuss iterieren, um die UIDs in Frage zu bekommen - siehe Franks Antwort für dieses Beispiel. – Jay
Sorry @Jay, ich dachte, die ursprüngliche Frage lautete: "Wie kann ich den UID-Wert aus dem Wörterbuch herausholen, nachdem ich das Wörterbuch des Benutzers mit seinem Benutzernamen/E-Mail gefunden habe?" Das bedeutet, dass Sie zuerst den "Datensatz" basierend auf Benutzername/E-Mail finden und dann die UID zurückgeben müssen. – justdan0227