【问题标题】:Retrieve data from an unknown child name with Firebase and Swift使用 Firebase 和 Swift 从未知子名称中检索数据
【发布时间】:2017-05-29 19:19:18
【问题描述】:

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

这是我的数据库组织:

  • 用户

    • 用户 ID1
      • 位置:value1
    • 用户 ID2
      • 位置:值2
  • ...

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

基本快照功能

    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?谢谢。

【问题讨论】:

    标签: swift xcode firebase firebase-realtime-database


    【解决方案1】:

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

    1. 从所有用户那里获取所有内容,然后在您的代码中管理您想要的内容;
    2. 仅使用用户 ID 和位置创建另一个字典。

    第二个选项是这样的:

    • 用户位置
      • 用户 ID1:位置 1
      • 用户 ID2:位置 2

    所以每次你改变你的主数组时,你也需要改变它。

    【讨论】:

    • 这个答案是不正确的,因为它肯定是可能的(见我的答案)。还有比这里介绍的更多的选项)
    • 嗯,实际上有无限的选项我刚刚列出了 2 个适合这个问题。如您所见,您所做的是从所有用户那里获取一切
    • 问题说明“我想检索数据库所有用户的位置数据。”这是可能的,你的回答说不是,然后说“有两个选择”。未来的读者应该清楚,是的,这是可能的,并且有两个以上的选择。此外,您提到“创建另一个数组”,但列出的第二个选项不是数组(无论如何,通常应避免使用 Firebase 数组)
    • 是的,你是对的。对不起,我会改变我的答案
    • 太棒了!选项 #2 太棒了,所以投给你一票!
    【解决方案2】:

    这是一个代码 sn-p,它检索并打印每个用户的 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)")
        } 
    })
    

    【讨论】:

    • 如果它回答了问题并且有效,请接受!
    • 我不能在 2 分钟之前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多