我有一个查询,它根据用户ID搜索用户。
usersRef.queryOrderedByChild("email").queryEqualToValue(email).observeEventType(.Value, withBlock: { snapshot in if snapshot.exists() { print("user exists") print(snapshot.key)
该查询返回正确的用户,但是该行print(snapshot.key)从字面上返回单词“ users”,而不是实际的用户ID。print(snapshot)返回以下用户:
print(snapshot.key)
print(snapshot)
Snap (users) { DELyncz9ZmTtBIKfbNYXtbhUADD2 = { email = "test3@gmail.com"; "first_name" = test; "last_name" = test; };
我如何得到DELyncz9ZmTtBIKfbNYXtbhUADD2?我可以通过使用来获取电子邮件,let email = child.value["email"]但无法获取密钥,因为它不是命名属性。
DELyncz9ZmTtBIKfbNYXtbhUADD2
let email = child.value["email"]
谢谢!!
编辑:由于弗兰克的回答,更新了代码。得到ambiguous use of key
ambiguous use of key
query.observeEventType(.Value, withBlock: { snapshot in print(snapshot.key) if snapshot.exists() { print("user exists") for child in snapshot.children { print(child.key)
当您在某个位置运行查询时,结果将是匹配子项的列表。即使只有一个匹配项,结果也将是一个孩子的列表。
您正在打印所有结果子代的密钥。由于没有单一结果,因此SDK会打印您查询的位置/集合的键:users。
users
您可能要寻找的是循环匹配的子项并打印其键:
let query = usersRef.queryOrderedByChild("email").queryEqualToValue(email) query.observeEventType(.Value, withBlock: { snapshot in for child in snapshot.children { print(child.key) } })