Database 在Firebase中查询具有唯一UID的用户';使用Swift将s作为键

Database 在Firebase中查询具有唯一UID的用户';使用Swift将s作为键,database,swift,firebase,Database,Swift,Firebase,我试图通过小写名称查询用户,当用户注册时,我会自动保存该名称。问题是我正在为使用uid的用户创建密钥。现在,我很难让其他用户找到他们的朋友,因为我要收回的只是第一个键“user”。这是我的firebase信息。。。 这是我的密码 let userRef = self.ref.childByAppendingPath("users") userRef.queryOrderedByChild("caseUsername") .queryStartingAtValue(self.sea

我试图通过小写名称查询用户,当用户注册时,我会自动保存该名称。问题是我正在为使用uid的用户创建密钥。现在,我很难让其他用户找到他们的朋友,因为我要收回的只是第一个键“user”。这是我的firebase信息。。。

这是我的密码

let userRef = self.ref.childByAppendingPath("users")
userRef.queryOrderedByChild("caseUsername")
       .queryStartingAtValue(self.searchTXTFLD.text?.lowercaseString, childKey: "caseUsername")
       .observeEventType(.Value, withBlock: { (snapshot) -> Void in
           print(snapshot.key)

请帮助我使用
self.searchTXTFLD.text?.lowercaseestring
查找用户。它应该等于user child
caseUsername

当您有一个查询时,可能有多个子项与该条件匹配。然后,当您侦听
.Value
事件时,Firebase将返回包含匹配子项列表的快照。即使只有一个匹配的子项,它仍将在列表中

因此,解决方案是迭代匹配的子项:

ref.queryOrderedByChild("caseUsername")
   .queryStartingAtValue(self.searchTXTFLD.text?.lowercaseString, childKey: "caseUsername")
   .observeEventType(.Value, withBlock: { snapshot in
       for child in snapshot.children {
           print(child.key);
       }
   });

当您有一个查询时,可能有多个子项与该条件匹配。然后,当您侦听
.Value
事件时,Firebase将返回包含匹配子项列表的快照。即使只有一个匹配的子项,它仍将在列表中

因此,解决方案是迭代匹配的子项:

ref.queryOrderedByChild("caseUsername")
   .queryStartingAtValue(self.searchTXTFLD.text?.lowercaseString, childKey: "caseUsername")
   .observeEventType(.Value, withBlock: { snapshot in
       for child in snapshot.children {
           print(child.key);
       }
   });

感谢@Frank van Puffelen。答案进一步说明了Firebase数据的结构。我没有完全使用你的答案,但以下是我的答案和有效的方法

  @IBAction func searchFriendsACTN(sender: AnyObject)
        {
            let queryRef = self.ref.childByAppendingPath("users")
            queryRef.queryOrderedByChild("caseUsername")
                .queryEqualToValue(self.searchTXTFLD.text?.lowercaseString)
                .queryLimitedToFirst(1)
                .observeEventType(.Value, withBlock: { snapshot in
                    if snapshot.exists()
                    {
                        var newIds = [String]()
                        var newNames = [String]()
                        var newCsnames = [String]()
                        var newPics = [String]()
                        for items in snapshot.value as! NSDictionary
                        {
                            let ids = items.key
                            let names = items.value["displayName"] as! String
                            let csnames = items.value["caseUsername"] as! String
                            let pics = items.value["image"] as! NSString

                            newIds.append(ids as! String)
                            newNames.append(names)
                            newCsnames.append(csnames)
                            newPics.append(pics as String)
                        }
                        self.caseUserNameArray = newCsnames
                        self.usersID = newIds
                        self.usernameArray = newNames
                        self.photos = newPics
                        self.friendsTBLVW.reloadData()
                    }
                })
        }

感谢@Frank van Puffelen。答案进一步说明了Firebase数据的结构。我没有完全使用你的答案,但以下是我的答案和有效的方法

  @IBAction func searchFriendsACTN(sender: AnyObject)
        {
            let queryRef = self.ref.childByAppendingPath("users")
            queryRef.queryOrderedByChild("caseUsername")
                .queryEqualToValue(self.searchTXTFLD.text?.lowercaseString)
                .queryLimitedToFirst(1)
                .observeEventType(.Value, withBlock: { snapshot in
                    if snapshot.exists()
                    {
                        var newIds = [String]()
                        var newNames = [String]()
                        var newCsnames = [String]()
                        var newPics = [String]()
                        for items in snapshot.value as! NSDictionary
                        {
                            let ids = items.key
                            let names = items.value["displayName"] as! String
                            let csnames = items.value["caseUsername"] as! String
                            let pics = items.value["image"] as! NSString

                            newIds.append(ids as! String)
                            newNames.append(names)
                            newCsnames.append(csnames)
                            newPics.append(pics as String)
                        }
                        self.caseUserNameArray = newCsnames
                        self.usersID = newIds
                        self.usernameArray = newNames
                        self.photos = newPics
                        self.friendsTBLVW.reloadData()
                    }
                })
        }

您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,使我们能够轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,允许我们轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。