按 child 排序的 Firebase 查询不起作用
Firebase query ordering by child not working
我尝试根据创建日期对我的 table 查看内容进行排序。最新的应该在上面。我的代码似乎没问题,但它没有显示正确的顺序。恰恰相反。
ref = Database.database().reference().child("placeID/\(placeIdFromSearch)")
ref.queryOrdered(byChild: "userTime").queryLimited(toLast: 10).observe(DataEventType.value, with: {(snapshot) in
if snapshot.childrenCount > 0 {
self.table.removeAll()
for video in snapshot.children.allObjects as! [DataSnapshot] {
let Object = video.value as? [String: AnyObject]
let userName = Object?["userName"]
let userGroup = Object?["userGroup"]
let userComment = Object?["userComment"]
let userTime = Object?["userTime"]
let userLikes = Object?["userLikes"]
let video = Videos(userName: userName as! String, userGroup: userGroup as! String, userComment: userComment as! String, userTime: userTime as! Int, userLikes: userLikes as! String)
self.table.append(video)
self.tableView.reloadData()
}
}
})
Firebase 实时数据库结果始终按升序排列。无法从数据库中按降序获取它们,因此您必须在应用程序代码中反转结果。
一个简单的选择是将每个项目插入 table 的顶部,而不是像现在这样将其附加到底部:
self.table.insert(video, at: 0)
另一种方法是在数据库中存储反转值,例如:userTime: -1654342137807
。这样数据库使用的升序实际上就是您想要的。
另见:
我尝试根据创建日期对我的 table 查看内容进行排序。最新的应该在上面。我的代码似乎没问题,但它没有显示正确的顺序。恰恰相反。
ref = Database.database().reference().child("placeID/\(placeIdFromSearch)")
ref.queryOrdered(byChild: "userTime").queryLimited(toLast: 10).observe(DataEventType.value, with: {(snapshot) in
if snapshot.childrenCount > 0 {
self.table.removeAll()
for video in snapshot.children.allObjects as! [DataSnapshot] {
let Object = video.value as? [String: AnyObject]
let userName = Object?["userName"]
let userGroup = Object?["userGroup"]
let userComment = Object?["userComment"]
let userTime = Object?["userTime"]
let userLikes = Object?["userLikes"]
let video = Videos(userName: userName as! String, userGroup: userGroup as! String, userComment: userComment as! String, userTime: userTime as! Int, userLikes: userLikes as! String)
self.table.append(video)
self.tableView.reloadData()
}
}
})
Firebase 实时数据库结果始终按升序排列。无法从数据库中按降序获取它们,因此您必须在应用程序代码中反转结果。
一个简单的选择是将每个项目插入 table 的顶部,而不是像现在这样将其附加到底部:
self.table.insert(video, at: 0)
另一种方法是在数据库中存储反转值,例如:userTime: -1654342137807
。这样数据库使用的升序实际上就是您想要的。
另见: