首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Firebase用户中找到最小的孩子

在Firebase用户中找到最小的孩子
EN

Stack Overflow用户
提问于 2017-10-04 02:12:36
回答 1查看 69关注 0票数 0

我希望在我的用户列表中找到最年轻的用户,并加载他们的数据:姓名、个人资料和当前的工作分配。我读过Firebase关于查询数据的入门文章,但它们的示例对我来说并不适用,因为我的数据的组织方式不同。我有一个额外的子层。

这是Firebase中的JSON树:

我尝试过加载用户列表,然后遍历它们以找到最年轻的用户,但这似乎有点过火了。Firebase文档使我认为我应该能够通过Firebase方法进行查询,比如'queryOrderedByChild‘或类似的方法。

我已经浏览了旧的文档这里和新的文档这里,但是我仍然不知道该做什么。

,所以这是我的工作流程:

该应用程序将在“成员”列表中找到最年轻的用户,并加载他们的姓名、个人资料、生日等等。他们将从工作列表中进行选择。一旦用户从可用的工作列表中选择,应用程序将从“成员”列表中加载下一个最年轻的用户,以此类推,直到所有用户都被加载并有机会选择工作。

我认为一个更好的工作流程应该是:

  1. 利用Firebase查询获取最年轻的用户
  2. 使用该查询加载该用户(图像和名称)

我该怎么做?

编辑#1:我尝试过的代码

代码语言:javascript
运行
复制
func loadExistingUsers(completion: @escaping ([[String : Any]]) -> ()) {
    var dictionary = [[String : Any]]()
    ref.child("members").observeSingleEvent(of: .value) { (snapshot: FIRDataSnapshot) in
        for child in snapshot.children {
            let snap = child as! FIRDataSnapshot
            if let value = snap.value as? [String : Any] {
                dictionary.append(value)
            }
        }
        completion(dictionary)
    }
}

然后在ViewDidLoad中:

代码语言:javascript
运行
复制
loadExistingUsers { (dictionary) in

        var youngestBirthday = 19000101
        var userName = "Sophie"

        for item in dictionary {
            let fetchedBirthday = item["birthday"] as! Int
            let fetchedName = item["firstName"] as! String

            if fetchedBirthday > youngestBirthday {
                youngestBirthday = fetchedBirthday
                userName = fetchedName
            }
        }
        print(userName,youngestBirthday)
    }

这个方法从我的用户列表中返回最年轻的用户,但是要想得到我想要的,似乎需要很长的路要走。我必须首先从Firebase获取用户,然后解析快照,然后创建一个数组,然后对数组进行排序,然后获取用户名。我觉得Firebase可以用一个查询来完成所有这些任务。我说错了吗?

EN

Stack Overflow用户

回答已采纳

发布于 2017-10-04 03:31:02

您可以使用以下代码获取最小的孩子:(因为您最小的约会日期是最大的,所以我使用toLast)

代码语言:javascript
运行
复制
ref.child("members").queryOrdered(byChild:"birthday").queryL‌​im‌​ited(toLast: 1).observeSingleEvent(of: .childAdded, with: { (snapshot) in
                        if let value = snapshot.value as? [String: Any] {
                                let name = value["firstname"] as? String
                                //you can do for other values as well
                                print(name)

                        }
                })
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46555987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档