Firebase – 检查高效的用户名

我开发了一个小function,检查通过注册来宾input的用户名是否可用。 尽pipe如此,该function使用迭代和条件在本地在设备上进行检查。 我想这可能会成为未来的性能瓶颈,当那个列表中有成千上万的用户时(每次成功创build一个新用户时都会更新列表)。 有没有办法在后端更有效地做到这一点?

这里是现在的作用:

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中的数据结构是这样的:

字母数字被认为是UID和用户名是admin

这个列表将如前所述增长,但现在只是testing目的。

提前致谢

更新:

  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) }) } 

让Firebase执行查询,而不是自己进行search。 FIRDatabaseQuery允许您通过键或值来sorting和筛选子项。 在你的情况下,你可以使用queryEqualToValue来查找与usernamesTaken匹配的usernameTxtField.text