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

我尝试过加载用户列表,然后遍历它们以找到最年轻的用户,但这似乎有点过火了。Firebase文档使我认为我应该能够通过Firebase方法进行查询,比如'queryOrderedByChild‘或类似的方法。
我已经浏览了旧的文档这里和新的文档这里,但是我仍然不知道该做什么。
,所以这是我的工作流程:
该应用程序将在“成员”列表中找到最年轻的用户,并加载他们的姓名、个人资料、生日等等。他们将从工作列表中进行选择。一旦用户从可用的工作列表中选择,应用程序将从“成员”列表中加载下一个最年轻的用户,以此类推,直到所有用户都被加载并有机会选择工作。
我认为一个更好的工作流程应该是:
我该怎么做?
编辑#1:我尝试过的代码
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中:
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可以用一个查询来完成所有这些任务。我说错了吗?
发布于 2017-10-04 03:31:02
您可以使用以下代码获取最小的孩子:(因为您最小的约会日期是最大的,所以我使用toLast)
ref.child("members").queryOrdered(byChild:"birthday").queryLimited(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)
}
})https://stackoverflow.com/questions/46555987
复制相似问题