【问题标题】:Firebase - Check efficiently username takenFirebase - 有效检查用户名
【发布时间】:2016-07-12 16:22:28
【问题描述】:

我开发了一个小功能,用于检查注册客人输入的用户名是否可用。尽管如此,该函数使用迭代和 if 条件在设备上进行本地检查。我认为当该列表中有成千上万的用户时,这可能会成为未来的性能瓶颈(每次成功创建新用户时都会更新列表)。有没有办法在后端更有效地做到这一点?

这是现在可以使用的功能:

func checkUsernameTaken(completion: (result: NSError) -> Void)
    {
        let errorFound:NSError = NSError(domain: "", code: 0, userInfo: nil)

        dbReference.child("usernamesTaken").observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot!) -> Void in
            if(snapshot != nil )
            {
                for rest in snapshot.children.allObjects as! [FIRDataSnapshot]  {
                    if(rest.value as? String == self.usernameTxtField.text!){
                        self.isUsernameTaken = true
                    }else{
                        self.isUsernameTaken = false
                    }
                }
                completion(result:errorFound)
            }else{
                self.isUsernameTaken = false
                completion(result:errorFound)
            }
        })
    }

Firebase 中的数据结构是这样的:

如前所述,此列表会不断增加,但目前它只是用于测试目的。

提前致谢

更新:

 func usernameValidation(completion: (result: NSError) -> Void)
    {
        let errorFound:NSError = NSError(domain: "", code: 0, userInfo: nil)

        dbReference.child("usernamesTaken").queryEqualToValue(self.usernameTxtField.text!).observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot!) -> Void in

            print(snapshot.childrenCount)
        })
    }

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    与其自己进行搜索,不如让 Firebase 执行查询。 FIRDatabaseQuery 允许您按键或值对子项进行排序和过滤。在您的情况下,您可以使用queryEqualToValue 来查找与usernameTxtField.text 匹配的usernamesTaken 的孩子。

    【讨论】:

    • 鉴于我的密钥一直在变化(因为它是一个 uid),我不确定如何使用上述内容。有什么例子可以帮助说明你的观点?
    • 对不起,我不使用 Swift,所以我无法真正调试您的代码。但这是相关的功能。
    • 使用上述方法使其工作(在检查方面),但还有一些其他问题正在解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多