使用Swift

时间:2018-08-14 14:53:24

标签: swift firebase firebase-realtime-database swift4

我必须通过提供其电子邮件来获取用户的ID。我的结构是:

users
    -Wc1EtcYzZSMPCtWZ8wRb8RzNXqg2
        -email: "batuarslan@gmail.com"
        -lists
            slid: "-LJsrWDfMPNcs_NjVYBM"
            uid:  "Wc1EtcYzZSMPCtWZ8wRb8RzNXqg2"

有没有办法做到这一点?还是我必须以其他方式重组我的树?我的代码:

func userLookUpByEmail (email: String, completionHandler: @escaping (_ result: String) -> Void) {
    var userId : String = ""

    usersRef.queryOrdered(byChild: "email").queryEqual(toValue: email).observeSingleEvent(of: .value, with: { snapshot in
        if snapshot.value != nil {
            userId = snapshot.key
        }
        else {
            userId = "nil"
        }
        completionHandler(userId)
    })
}

func userLookUpByEmail (email: String, completionHandler: @escaping (_ result: String) -> Void) {
    var userId : String = ""

    usersRef.queryOrdered(byChild: "email")
            .queryEqual(toValue: email)
            .observeSingleEvent(of: .value, with: { snapshot in

        if snapshot.value != nil {
            userId = snapshot.key
        }
        else {
            userId = "nil"
        }
        completionHandler(userId)
        })
    }

1 个答案:

答案 0 :(得分:0)

Firebase数据库结构文档建议使用带有两个方向性条目的扁平结构,可以添加冗余以加快查找速度。

请参阅https://firebase.google.com/docs/database/ios/structure-data的链接“创建可缩放的数据”

要扩展有效方式,应在索引中添加类似于“ SQL中的外键”的两个方式条目。

例如,在您的情况下: 您在显示的代码中尝试执行的操作没有任何问题。但是为了扩展它,添加了一个新的节点电子邮件哈希(因为电子邮件不能用作节点/子节点),最好与您的用户节点同级。该电子邮件哈希节点应存储电子邮件哈希到uid的映射。

users
-Wc1EtcYzZSMPCtWZ8wRb8RzNXqg2
    -email: "batuarslan@gmail.com"
    -lists
        slid: "-LJsrWDfMPNcs_NjVYBM"
        uid:  "Wc1EtcYzZSMPCtWZ8wRb8RzNXqg2"
 ...
 ...

 ...
emails
 -<md5 hash of "batuarslan@gmail.com">: "Wc1EtcYzZSMPCtWZ8wRb8RzNXqg2"
...
...

...

因此,lookupByEmail首先应为输入电子邮件生成md5哈希,然后在emailhashhes节点中查找emailhash以获取相应的uid,然后使用lookupByUID获取用户数据。

要生成电子邮件的md5哈希,请参考:How to convert string to MD5 hash using ios swift

通过应用数据库规则在Firebase实时数据库上建立索引。请参阅:

https://firebase.google.com/docs/database/security/indexing-data