【问题标题】:Firebase: How to structure data for the most shared posts in the last n days?Firebase:如何为过去 n 天内共享最多的帖子构建数据?
【发布时间】:2018-01-18 20:29:50
【问题描述】:

假设有一个博客,您想列出今天、过去 7 天和过去 30 天最喜欢或分享的帖子。

今天的解决方案相当简单:

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

然后查询将观察mostSharedPostsForToday/2018-10-08 以查找由子numberOfShares 排序的今天最多共享的帖子。

但是如何构造过去 n 天内分享最多的帖子的数据呢?

我能想到的一个解决方案是编写一个每天填充节点mostSharedPostsForThePastNDays 的云函数。但这对我来说似乎很麻烦。难道没有更有效的方法吗?

编辑:正如第一个答案的 cmets 中指出的那样,应支持分页以节省流量。

【问题讨论】:

    标签: firebase firebase-realtime-database nosql


    【解决方案1】:

    我建议您使用另一种方法。不要将日期用作您的节点,而是删除该节点并为每个帖子添加一个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");
    

    希望对你有帮助。

    【讨论】:

    • 感谢您的回答,但由于 Firebase 不支持按多个值排序,因此使用您的方法我无法按共享数量排序。排序将有助于分页,例如首先只显示前 5 个,然后是接下来的 5 个,依此类推。
    • 您不能使用多种订购方法,但您仍然可以实现这一点。请参阅此video。在您的情况下,您需要使用:TIMESTAMP_numberOfShares.
    • TIMESTAMP_numberOfShares(例如2018-01-01_100)试过了,不幸的是没有办法按降序排序。取反是不可能的,因为它是字符串类型的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多