我想在我的用户列表中找到最年轻的用户并加载他们的数据:名称,个人资料图片和当前的工作分配。我已经阅读了有关查询数据的Firebase初级读物,但他们的示例并不适用于我,因为我的数据组织方式不同。我有一个额外的子图层。
这是我在Firebase中的JSON树:
我已经尝试加载用户列表,然后迭代它们以找到最年轻的用户,但这似乎有些过分。 Firebase文档让我觉得我应该能够通过Firebase方法进行查询,比如查询订阅者和查询。或类似的。
我已经查看旧文档here和新文档here,但我仍然想知道该怎么做。
这是我的工作流程:
该应用程序将在"成员列表中找到最年轻的用户"并加载他们的名字,个人资料图片,生日等。他们将从工作列表中选择。一旦该用户从可用作业列表中选择,该应用程序将从"成员"列表中加载下一个最年轻的用户,依此类推,直到所有用户都已加载并且有机会选择作业。
我认为更好的工作流程是:
我将如何做到这一点?
编辑#1:代码I<尝试
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可以通过一个查询完成所有这些工作。我错了吗?
答案 0 :(得分:1)
您可以使用此代码获得最小的孩子:(因为您最年轻的日期是最大的数字,因此我使用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)
}
})