使用Firebase和Swift从未知的子名称中检索数据

时间:2017-01-14 14:46:22

标签: swift xcode firebase firebase-realtime-database

我使用Firebase作为我的IOS应用的数据库。我想从数据库中检索几个用户的数据。

以下是我的数据库组织:

  • 用户

    • UserID1
      • 位置:value1
    • UserID2
      • location:Value2
  • ...

我想检索数据库所有用户的位置数据。

基本快照功能

    ref.child("Users").child("").child("Location").observe(.value, with: {
        snapshot in

        for Location in snapshot.children {
            self.locationsArray.append((Location as AnyObject).key)
        }
        print(self.locationsArray)
    })

我的问题是:即使我没有指定(我也不能)作为名称的用户ID,我如何检索所有Locations孩子以前?感谢。

2 个答案:

答案 0 :(得分:2)

这是一个代码片段,用于检索和打印每个用户的uid及其位置。

我们可以使用.query

进一步优化我们的结果
let usersRef = ref.child("users")
usersRef.observeSingleEvent(of: .value, with: { (snapshot) in

    for snap in snapshot.children {
        let userSnap = snap as! FIRDataSnapshot
        let uid = userSnap.key //the uid of each user
        let userDict = userSnap.value as! [String:AnyObject] //child data
        let location = userDict["Location"] as! String
        print("key = \(uid) is at location = \(location)")
    } 
})

答案 1 :(得分:1)

Firebase无法仅检索位置。 有很多选择,但我看到两个更适合你的情况:

  1. 获取所有用户的所有内容,然后在代码中管理您想要的内容;
  2. 仅使用用户ID和位置创建另一个字典。
  3. 第二种选择是:

    • UsersLocation
      • UserID1:LOCATION1
      • UserID2:LOCATION2

    因此,每次更改主阵列时,您都需要更改它。