【发布时间】:2017-11-11 14:09:36
【问题描述】:
背景
我正在创建一个用户可以随时提交帖子的应用。该应用的主要功能之一是群组中的用户可以在一段时间内(例如过去 10 天的所有帖子)开始一个会话来投票选出最佳帖子。
然后,该应用会在表格视图中显示帖子。用户可以使用分段控件更改显示的帖子类型。一旦所有用户都投票了,那么下一个视图控制器将显示投票结果 - 仅显示每个类别的前 5 个帖子(“well”、“notWell”、“confused”)
这就是我在 Firebase 数据库中构建它的方式。
- 每个用户都必须属于一个组 - 例如。 “平衡香蕉”。
- 每个帖子必须属于三个类别之一 - 例如“好”、“不好”、“困惑”。
- 每个帖子都必须有日期。
问题
我应该如何开发“显示每个类别的前 5 个帖子”的功能?
我需要为日期为 > x 的每个帖子类型检索 5 个投票数最高的帖子。
我查看了关于 SO 的几个问题,这些问题与使用 Firebase 数据库查询多个 where 子句有关,我认为最合适的方法是使用 QueryOrderedBy 过滤日期,然后编码逻辑以提取每个帖子中的前 5 个帖子类别。如果这是一种合适的方法,我应该如何遍历每个 snapshot.children 并为每个类别创建一个包含前 5 个帖子的字典?
与 Firebase 数据库中的多个 where 子句相关的 SO 帖子。
Query based on multiple where clauses in firebase 有一个由 Frank van Puffelen 提供的与此主题相关的出色回答。
当前代码
func loadData() {
self.ref.child("session").child((self.currentUser?.team)!).queryOrdered(byChild: "date").queryStarting(atValue: postStartDate).observe(.value, with: {
snapshot in
var wellItems: [SessionPost] = []
var notWellItems: [SessionPost] = []
var confusedItems: [SessionPost] = []
for item in snapshot.children {
let postItem = SessionPost(snapshot: item as! DataSnapshot)
if let postType = postItem.type {
switch postType {
case "well":
wellItems.append(postItem)
case "notWell":
notWellItems.append(postItem)
case "confused":
confusedItems.append(postItem)
default:
break
}
}
}
self.topWellPostItems = wellItems
self.topNotWellPostItems = notWellItems
self.topConfusedPostItems = confusedItems
self.tableView.reloadData()
})
【问题讨论】:
标签: swift firebase-realtime-database