2017-08-24 106 views
0

我使用類似於Tinder的「卡堆棧」創建了一個應用,其中包含Firebase實時數據庫後端。每張卡片將是一個新的未讀帖子,如果用戶用完新帖子,他們將用完卡片。不過,我不知道爲此構建數據的最佳方式。我可以將閱讀帖子的ID存儲在用戶下,然後當我看帖子feed時,我可以過濾掉閱讀帖子客戶端?用於獲取未讀帖子的Firebase

這似乎有點混亂,並不是一個非常好的選擇性能明智。有更好的選擇嗎?

編輯:粗糙的代碼我在想什麼:

數據示例

posts: 
    "-KibasdkjbSAdASd": { 
      title: 'New Post', 
      body: { 
       ... 
      } 
    }, 
    "-KisadBVsdadSd": { 
      title: 'New Post 2', 
      body: { 
       .. 
      } 
    } 
    "-KibaFNQsicaASd": { 
      title: 'New Post 3', 
      body: { 
       ... 
      } 
    } 

users :  
    "-KisadBVsdadSd": { 
      name: 'Tom', 
      readPosts: { 
       "-KibasdkjbSAdASd": { 
        title: 'New Post', 
        body: { 
         ... 
        } 
       }, 
       "-KisadBVsdadSd": { 
        title: 'New Post 2', 
        body: { 
         .. 
       } 
      } 
     } 
    } 

代碼

const rootRef = firebase.database.ref(); 
const postRef = rootRef.child("posts"); 
const readPostRef = rootRef.child("users/"+uid+"/readPosts"); 

let readPosts= []; 

//Get initial list of read posts 
readPostRef.once("value", function(snapshot) { 
    readPosts = Object.keys(snapshot); 
}); 
//Update read posts when added 
readPostRef.on("child_added", function(snapshot) { 
    readPosts = Object.keys(snapshot); 
}); 

//Get list of posts, filtered on read post array 
urlRef.on("value", function(snapshot) { 
    snapshot.forEach(function(child) { 
    if(!readPosts.includes(child.key)){ 
     //Unread post 
    } 
    }); 
}); 
+0

您的解決方案是我認爲正確的。您也可以使用雲端函數進行排序工作。 – creativecreatorormaybenot

回答

0

這取決於您在其中顯示卡給用戶的順序。

如果您以可預測的順序(例如從最新到最舊)顯示它們,您可以記住用戶看到的最後一張卡的ID。

如果您以隨機或個性化的順序顯示它們,您可能確實需要精確跟蹤每個用戶已經看到的卡片。

我不知道爲什麼這會很混亂或表現糟糕。所以如果你想要一個更好的選擇,你必須展示你如何實現凌亂/慢速選項。

+0

謝謝!我可能會嘗試按日期排序,但我認爲在我的情況下它會隨機更好地工作。我認爲這可能是因爲我缺乏Firebase經驗而產生的混亂,現在我已經包含了代碼來大致展示我在想什麼(可能有點僞代碼,我是在飛行中寫的)。 –

+0

我還不確定這有什麼特別的。我可能不會重複每個用戶的整個帖子,但這取決於您的用例。有很多級別的重複的原因。如果您是NoSQL的新手,並且對數據重複感到畏懼,我建議您閱讀[NoSQL數據建模](https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/)並觀看[適用於SQL開發人員的Firebase](https://www.youtube.com/playlist?list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s)。 –