我刚刚实施了一位朋友添加系统,而且我在如何只允许用户查看朋友的帖子方面摸不着头脑。
在我显示帖子的主屏幕上,我有:
DataService.ds.REF_USERS.child(currentUser!).child("friends").observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in
for snapshots in snapshot.children.allObjects {
let snap = snapshots as! FIRDataSnapshot
var frand = String(snap.key)
self.friendsArray.append(frand)
}
拉回了所有朋友的UID。
然后我想搜索所有那些UID作为孩子的帖子。
我想也许我可以使用equalTo查询通过friendsArray进行for循环...?但是我不确定如何使用我当前现有的查询来实现这一点,该查询显示了我想要查看的帖子:
DataService.ds.REF_POSTS.queryOrderedByChild("timestamp").queryStartingAtValue(cutoff).observeEventType(.ChildAdded, withBlock: { (snapshot:FIRDataSnapshot) in
- 设置我的帖子并将其附加到数组的代码 -
self.collectionView.reloadData()
})
我的一些数据结构是:
users
3093098409384
friends
29834098209 : true
posts
099390234
userWhoPosted: 29834098209
所以我将朋友拉出了用户 - >朋友 - > UID位,但我如何取回这些用户发布的帖子,那么我正在执行我的正常查询?
感谢任何指导。
答案 0 :(得分:4)
看看这篇文章: https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html?m=1
基本上,您需要“扇出”您的数据,这意味着将“发布”对象数据复制到多个位置,以便更容易访问。 即:创建一个“时间轴”模式,并在每个用户的uid下,并在该用户的关注者的帖子下。
Timeline: {
<user_uid>: {
<post_id>: {
// your post data
}
}
}
您可以通过每次用户提交新帖子,将该帖子发送到其每个关注者的时间轴来实现。
这可能听起来很奇怪,但Firebase有一个概念,你应该多次复制数据,以便更容易访问。