2017-08-24 5 views
0

私はTinderと似た「カードスタック」を持つアプリケーションを、FirebaseリアルタイムDBバックエンドとともに作成しています。新しいカードがなくなると、各カードは未読の新しいポストになります。しかし、私はこれのためにデータを構造化する最良の方法を知らない。読んだ投稿のIDをユーザーの下に保存できますか?投稿フィードを見ると、読んだ投稿のクライアント側を除外できますか?未読の投稿を取得するための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) –

関連する問題