2017-08-10 32 views
1

讓我們假設有一個博客,你想列出今天,最近7天和最近30天最喜歡或共享的帖子。Firebase:如何在過去n天內爲大多數共享帖子構建數據?

今天的解決方案是相當容易:

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

那麼查詢將觀察mostSharedPostsForToday/2018-10-08今天的被子numberOfShares下令最分享的訊息。

但是如何構建過去n天內共享帖子數量最多的數據?

我能想到的一個解決方案是編寫一個雲功能,每天填充節點mostSharedPostsForThePastNDays。但對我來說似乎很麻煩。沒有更有效的方法嗎?

編輯:正如第一個答案的評論中指出的,應該支持分頁以節省流量。

回答

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