2016-11-22 24 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 –