我正在使用Firebase构建社交应用。我在Firebase中存储帖子,如下所示:
posts: {
"postid": {
author: "userid"
text: "",
date: "timestamp"
category: "categoryid"
likes: 23
}
}
每个帖子属于一个类别,并且可能喜欢帖子。
现在,我尝试显示属于特定类别的帖子,按喜欢的数量排序。我可能还希望按日期限制过滤器,以便仅显示类别中最近,最喜欢的帖子。我怎么能这样做?
Firebase查询功能似乎不支持这样的多个查询,这看起来很奇怪......
答案 0 :(得分:12)
您只能使用一个排序函数with Firebase database queries,,但正确的数据结构将允许您按多个字段进行查询。
在您的情况下,您想按类别订购。它不是将类别作为属性,而是可以作为posts
下的索引:
posts: {
"categoryid": {
"postid": {
author: "userid"
text: "",
date: "timestamp",
category: "categoryid",
likes: 23
}
}
}
现在,您可以编写查询以获取特定类别下的所有帖子。
let postsRef = Firebase(url: "<my-firebase-app>/posts")
let categoryId = "my-category"
let categoryRef = postsRef.childByAppendingPath(categoryId)
let query = categoryRef.queryOrderedByChild("date")
query.observeEventType(.ChildAdded) { (snap: FDataSnapshot!) {
print(snap.value)
}
上面的代码为特定类别的帖子创建了引用,并按日期排序。数据结构可以进行多次查询。回调闭包将触发指定类别下的每个单独项目。
如果要进一步查询,则必须对数据进行客户端过滤。