我制作了一个以下系统,用户可以互相关注,但目前还不是很有用。我似乎无法理解如何仅显示您关注的用户的帖子 - 所以我在这里问你将如何做到这一点。
让我向您展示如何设置数据库:
正如您所看到的,我有一个名为Users
的点击 - 在那里存储了所有用户ID。每当用户想要关注其他用户时,点按Following
并在那里按下当前用户按下的用户 - 他/她的ID存储在Following
下。然后将当前用户ID添加到他/她在Followers
下跟随的用户。非常简单但很难解释:D我希望你能到达我要去的地方。
所以现在我只想显示我关注的用户的帖子。你会怎么做?你会这样做吗:当用户发帖时,会在名为Posts
的点按下添加到自己的名称并添加到PostsToFollow
下的所有用户名?我只是认为它会占用数据库中的大量空间?难道没有更好的方法吗?
这里是我的代码的一部分,它让我所有当前的用户关注者。如果我在创建新帖子时将该代码添加到postsToFollow
,我该如何使用该代码?
func startObersvingDB() {
FIRDatabase.database().reference().child("Users").child(IDgotten).child("Followers").observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in
var newUpdates = [FollowersStruct]()
for update in snapshot.children {
print(update)
let updateObject = FollowersStruct(snapshot: update as! FIRDataSnapshot)
newUpdates.append(updateObject)
}
self.updates = newUpdates.reverse()
self.tableView.reloadData()
}) { (error: NSError) in
print(error.description)
}
}
致Frank :
我已将此信息用于将所有帖子添加到关注我的用户的所有用户。我不能这样做,因为我在帖子上有一个喜欢和评论按钮,所以一个用户帖子上的喜欢将与其他用户帖子不一样,这就是为什么我认为将关键字添加到关注者墙壁中的帖子的想法是很棒的。但是我该怎么做?
到目前为止,我已经做到了这一点,试图完成你所说的:-):
let feed = Sweet(content: update, addedByUser: name!, profilePhoto: uid, likesForPost: ["user id": false], date: timePosted, category: 1, workoutComment: "", workoutTime: "")
let feedRef = FIRDatabase.database().reference().child("feed-items").childByAutoId()
feedRef.setValue(feed.toAnyObject())
FIRDatabase.database().reference().child("Users").child(uid).child("Followers").observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in
var newFollowers = [FollowersStruct]()
for updateFollowers in snapshot.children {
let updateObjectFollowers = FollowersStruct(snapshot: updateFollowers as! FIRDataSnapshot)
newFollowers.append(updateObjectFollowers)
}
self.followings = newFollowers
print(self.followings.count)
for i in 0..<self.followings.count {
let followers = self.followings[i]
let feedRefFollowers = FIRDatabase.database().reference().child("Users").child(followers.Id).child("Wall").childByAutoId()
feedRefFollowers.setValue(feed.toAnyObject())
}
}) { (error: NSError) in
print(error.description)
}
答案 0 :(得分:0)
使用用户自己的名称和撰写帖子所有关注者的名字都是散布数据的典型示例。这确实会复制数据,但好处是您的读取操作会更快,代码也会更加简单。
如果您不想复制整个帖子,您也可以在每个关注者&#34;墙&#34;下面写下新帖子的关键字。然后,当您需要显示用户的帖子列表时,您可以阅读他们的&#34; wall&#34;和客户端加入每个帖子。这是我们classic Firefeed example app中采用的方法。
这些方法中的任何一种都是非规范化的形式:复制部分数据以获得更好的读取性能。
我强烈建议您在NoSQL data modeling上阅读这篇文章并查看Firebase for SQL developers上的视频系列。哦......这blog post on client-side fan-out也不会受伤。