2016-11-22 35 views
0

我做了一个以下的系统,用户可以相互关注,但目前并不是非常有用。我似乎无法知道如何只显示你关注的用户的帖子 - 所以我在这里问你如何做。显示你关注的用户的帖子 - swift&firebase

让我告诉你数据库的设置方式:

enter image description here

正如你可以看到我有一个名为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) 
     } 
    } 

弗兰克

我做了这个添加整个帖子所有正在关注我的用户的用户。我无法这样做,因为我在帖子上有一个like和comment按钮,所以一个用户帖子上的喜欢与其他用户帖子不一样,这就是为什么我认为在followers墙上添加关键帖子的原因是很棒的。但我该怎么做?

到目前为止,我已经做这个,要完成的任务,你说:-):

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

根据用户自己的名字所有他的跟随者的名字写的帖子是扇出的一个典型例子数据。这确实复制了数据,但好处是您的读取操作将更快并且代码更简单。

如果您不想复制整篇文章,也可以在每个关注者的“墙”下面写下新文章的关键字。然后,当你需要显示一个用户的帖子列表时,你阅读他们的“墙”和客户端加入每个帖子。这是我们的classic Firefeed example app采取的方法。

这些方法要么是反规范化的形式:复制数据的一部分,以获得更好的读取性能。

我强烈建议阅读NoSQL data modeling本文以及对Firebase for SQL developers检查出我们的系列视频。哦......而这blog post on client-side fan-out也不会受伤。

+0

这听起来像我应该增加的职位关键用户“墙”去了。但是,我将如何读取所有这些密钥,然后才能发布帖子? –

+0

如何获得新增加的帖子的关键? –

+0

我编辑了这篇文章并附有一条消息给你,你可以在这里看到我想要做的事情:D –

相关问题