尝试......
假设的结构(这是斯威夫特2,火力地堡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!)
}
一对夫妇的事情注意
的“字典”变量被告知它被指定类型的字典[海峡ing:Anyobject]。
任何对象很可能,是任何对象。一个字符串,另一个字典,一个int。所以,你需要确保你的代码可以处理任何对象是
在这种情况下,快照关键是该用户的快照,关键要有父节点,在这种情况下是uid_0。所以输出
[email protected]
some display name
uid_0
编辑:
更新了火力地堡4,雨燕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)
}
})
来源
2016-12-23 22:37:28
Jay
这是行不通的。没关系,如果你有一个单独的记录。如果您有uid_0和uid_1,并且您正在查找的电子邮件位于uid_1中,您将如何找到它?这些uid是自动生成的,因此您不知道它们,但需要搜索孩子以查找电子邮件并返回记录 – justdan0227
@ justdan0227它确实有用!代码已经过测试。但是,您*用例*与问题中的内容不同。 OP询问如何在找到节点时获取UID,并且我的代码解决了如何获取该UID(这是快照?.key),假设每个节点都有一个谨慎的用户名和电子邮件。我的代码做到了。但是,如果可能有多个结果,则查询将返回包含所有匹配节点的快照。然后你会迭代快照来获得有关uid的信息 - 请参阅Frank对此例子的回答。 – Jay
对不起@Jay,我认为最初的问题是“如何用用户名/电子邮件查找用户字典后,如何从字典中获取UID值?”这意味着你必须首先根据用户名/电子邮件找到“记录”,然后返回UID。 – justdan0227