search儿童价值Firebase / Swift

我的数据库有这样sorting的值:

Users UID Username Email 

我想实现一个朋友添加系统,您可以search用户名或电子邮件,它可以让你添加该人。

我可以通过使用find用户

  REF_USERS.queryOrdered(byChild: "displayname").queryEqual(toValue: input).observeSingleEvent(of: .value) { (snapshot: FIRDataSnapshot) in { print(snapshot.value) } 

有了这个我得到了用户的整个字典,但我有一个问题抓住了UID。

snapshot.key给我“用户”。

在用户名/电子邮件中find用户字典后,如何从字典中获取UID值?

当您针对Firebase数据库执行查询时,可能会有多个结果。 所以快照包含了这些结果的列表。 即使只有一个结果,快照也将包含一个结果列表。

 let query = REF_USERS.queryOrdered(byChild: "displayname").queryEqual(toValue: input) query.observeSingleEvent(of: .value) { (snapshot: FIRDataSnapshot) in { for child in snapshot.children { print(child.key) } } 

另请参阅:

  • Firebase snapshot.key不能返回实际的密钥?
  • queryOrderBy中的Firebase访问键
  • queryOrderBy中的Firebase访问键
  • Firebase正在获取数据

尝试这个…

假设一个结构

 users uid_0 email: "someuser@thing.com" displayName: "some display name" 

我们想要得到uid_0的信息

 let input = "uid_0" usersRef.queryOrdered(byChild: "displayName").queryEqual(toValue: input) .observeSingleEvent(of: .value) { (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”variables被告知被分配了一个types为[String:Anyobject]的字典。

任何对象都可以,是任何对象。 一个string,另一个字典,一个int。 所以你需要确保你的代码可以处理任何对象

这种情况下的快照键是该用户的快照,键必须是父节点,在这种情况下是uid_0。 所以输出是

 someuser@thing.com some display name uid_0