2017-08-10 7 views
1

ブログがあり、今日、過去7日間、過去30日間の好きな、または共有された投稿をリストしたいとします。Firebase:最後のn日間に最も共有された投稿のデータを構造化する方法は?

今日のためのソリューションはかなり簡単です:

-mostSharedPostsForToday 
    -2018-10-08 
     -$postId 
      -numberOfShares 

その後のクエリは、子供numberOfSharesが注文した今日の最も共有投稿をmostSharedPostsForToday/2018-10-08を観察します。

しかし過去n日間に最も共有された投稿のデータを構造化するにはどうすればよいですか?

1つの解決策は、毎日ノードmostSharedPostsForThePastNDaysに値を設定するクラウド関数を記述することです。しかし、それは私にとって面倒なようです。もっと効率的な方法はありませんか?

編集:第1の回答のコメントで指摘したように、トラフィックを節約するためにページネーションをサポートする必要があります。

答えて

0

私は別の方法をお勧めします。あなたのノードとして日付を使用しての代わりに、そのノードを削除して、このような各ポストのためTIMESTAMPを追加します。

-mostSharedPostsForToday 
    -$postId 
     - TIMESTAMP: 2018-10-08 
     - numberOfShares: 10 

あなたが一日で持っているどのように多くの共有を知るには、次のコードを使用する必要があります。

rootRef.child("mostSharedPostsForToday").child(postId).orderByChild("TIMESTAMP").equalsTo("2018-10-08"); 

そして、あなたが間隔をしたい場合は、次のコードを使用してください:

rootRef.child("mostSharedPostsForToday").child(postId).orderByChild("TIMESTAMP").startAt("2018-10-08").endAt("2018-10-15"); 

はそれがお役に立てば幸いです。

+0

あなたの答えに感謝しますが、あなたのアプローチでは、Firebaseは複数の値による順序付けをサポートしていないため、共有の数でソートすることはできません。並べ替えはページネーションに役立ちます。最初にトップ5だけを表示し、次に5を表示します。 – MJQZ1347

+0

複数の注文方法を使用することはできませんが、これを達成することはできます。この[ビデオ](https://www.youtube.com/watch?v=sKFLI5FOOHs&index=4&list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s=5#t=9m03s)をご覧ください。あなたの場合は、 'TIMESTAMP_numberOfShares'を使用する必要があります。 –

+0

'TIMESTAMP_numberOfShares'(たとえば' 2018-01-01_100')で試してみましたが、残念ながら降順でソートする方法はありません。値の否定は文字列型であるため不可能です。 – MJQZ1347

関連する問題