一尘不染

Firebase snapshot.key没有返回实际密钥?

swift

我有一个查询,它根据用户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)返回以下用户:

Snap (users) {
   DELyncz9ZmTtBIKfbNYXtbhUADD2 =     {
       email = "test3@gmail.com";
       "first_name" = test;
       "last_name" = test;
   };

我如何得到DELyncz9ZmTtBIKfbNYXtbhUADD2?我可以通过使用来获取电子邮件,let email = child.value["email"]但无法获取密钥,因为它不是命名属性。

谢谢!!

编辑:由于弗兰克的回答,更新了代码。得到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)

阅读 246

收藏
2020-07-07

共1个答案

一尘不染

当您在某个位置运行查询时,结果将是匹配子项的列表。即使只有一个匹配项,结果也将是一个孩子的列表。

您正在打印所有结果子代的密钥。由于没有单一结果,因此SDK会打印您查询的位置/集合的键:users

您可能要寻找的是循环匹配的子项并打印其键:

let query = usersRef.queryOrderedByChild("email").queryEqualToValue(email)
query.observeEventType(.Value, withBlock: { snapshot in
    for child in snapshot.children {
        print(child.key)
    }
})
2020-07-07