Попробуйте это ...
Предположим, структура (это Swift 2, Firebase 2)
users
uid_0
email: "[email protected]"
displayName: "some display name"
, и мы хотим получить информацию uid_0 в
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!)
}
несколько шагов примечание
Переменная «dict» сообщает, что ей присваивается словарь типа [Str ing: Anyobject].
Любой объект может быть любым объектом. Строка, другой словарь, int. Поэтому вам необходимо убедиться, что код может обрабатывать все, что есть у объекта
Ключ моментального снимка в этом случае является снимком этого пользователя, а ключ должен быть родительским узлом, который в этом случае является uid_0. Таким образом, выход
[email protected]
some display name
uid_0
EDIT:
Обновлены для Firebase 4, Swift 4 и обрабатывают случай, когда несколько детей возвращаются
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)
}
})
Это не работает. Это нормально, если у вас есть одна запись. Как бы вы его нашли, если у вас были uid_0 и uid_1, а адрес электронной почты, который вы ищете, находится в uid_1.Uid автоматически генерируются, и поэтому вы их не знаете, но нужно искать детей, чтобы найти электронное письмо и вернуть запись. – justdan0227
@ justdan0227 Это действительно работает! Код проверен. Тем не менее, вы используете * случай, который отличается от того, что было в вопросе. OP спрашивает, как получить UID, как только узел будет найден, и мой код обращается к тому, как получить этот UID (который является снимком? .key), предполагая, что у каждого узла есть скрытое имя пользователя и адрес электронной почты. Мой код делает это. Однако, если есть несколько возможных результатов, запрос возвращает Snapshot, который содержит все соответствующие узлы. Затем вы должны перебрать снимок, чтобы получить информацию об этом, - см. Ответ Фрэнка для этого примера. – Jay
Извините @ Джей, я думал, что исходный вопрос: «Как я могу получить значение UID из словаря после поиска словаря пользователя с их именем пользователя/электронной почтой?» Это означает, что вам нужно сначала найти «запись» на основе имени пользователя/электронной почты, а затем вернуть UID. – justdan0227