从Swift的Firebase获取给定值的KEY

时间:2018-11-28 04:06:17

标签: ios swift firebase

拥有用户注册表,我们想输入一个电子邮件地址,然后返回UID。

有没有办法迅速做到这一点?

我们希望函数返回它。

enter image description here

就像我们在功能中输入user@user.com一样,它将返回gSVeU6。...

任何提示和建议都是值得赞赏的人。

这是Firebase JSON树的样子 enter image description here

func findFriendsUIDFromFirebase(selectedFriendsEmail: String) {
    print("Hey from findFriendsUIDFromFirebase called")
    fir.child("registeredUsersOnPlatform").observeSingleEvent(of: .value, with: { (snapshot) in

        if snapshot.exists() {

            guard let allTheUsers = snapshot.value as? [String:String] else {
                print("Something is wrong with this snapshot")
                return
            }

            if let selectedUserUIDFromFirebase = allTheUsers.someKey(forValue: selectedFriendsEmail) {
                //DO STUFF

基本上,通过这种方式,我们在本地下载所有内容,然后遍历字典,但我正在寻找一种更好的方式,该方式不涉及下载整个内容。也许带有.equals()的东西?

同时,由于某些原因,在打印字典时,它似乎停留在100个键值对中。当实际桌子上有300对。在某处有些剪裁。

2 个答案:

答案 0 :(得分:1)

您需要针对要查找的特定值执行Firebase query

let queryEmail = "Userone@user.com"
fir.child("registeredUsersOnPlatform").queryOrderedByValue().queryEqual(toValue: queryEmail).observeSingleEvent(of: .value) { (querySnapshot) in
    for result in querySnapshot.children {
         let resultSnapshot = result as! DataSnapshot
         print (resultSnapshot.key)
    }
}

您还可以使用.queryLimited(toFirst: x)

限制查询结果的数量

答案 1 :(得分:0)

如果要在Firebase中创建用户时获取密钥,可以在用户回叫数据中获取它们,例如:

Auth.auth().createUser(withEmail: email, password: pwd) { (user, _) in
            print(user?.uid)
        }

否则,如果要从常规列表数据中的值获取键,以便使用queryEqualToValue然后打印快照的子键