Javascript Firebase,如何在日期范围内按键排序

Javascript Firebase,如何在日期范围内按键排序,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我已在firebase实时数据库中设置数据,如下所示: 钥匙{ 创建日期, 人气 评级 作者} 能否检索以下问题的答案: 就受欢迎程度而言,上个月排名前50的游戏在哪里 本周排名最低的比赛在哪里 今天收视率最高的游戏是什么 回答一个可能会回答另一个,但我确信我把它们都放进去了。 所有这些都要求你考虑多个属性。由于Firebase实时数据库只能对单个属性进行排序/筛选,因此在不修改数据模型的情况下无法执行这些操作。要想获得一本好的入门书,请在这里阅读我的答案: 在这种情况下,每个节点需要三个额外属

我已在firebase实时数据库中设置数据,如下所示:

钥匙{ 创建日期, 人气 评级 作者}

能否检索以下问题的答案:

  • 就受欢迎程度而言,上个月排名前50的游戏在哪里
  • 本周排名最低的比赛在哪里
  • 今天收视率最高的游戏是什么

  • 回答一个可能会回答另一个,但我确信我把它们都放进去了。

    所有这些都要求你考虑多个属性。由于Firebase实时数据库只能对单个属性进行排序/筛选,因此在不修改数据模型的情况下无法执行这些操作。要想获得一本好的入门书,请在这里阅读我的答案:

    在这种情况下,每个节点需要三个额外属性:

  • 第一次查询时,将月份和流行度相结合的属性。例如:
    “月流行度”:“201812\u 125”
    (如果流行度为125)
  • 用于第二次查询的合并月份和评级的属性。例如:
    “每周评级”:“2018w51\u 4”
  • 用于第三次查询的日期和评级相结合的属性。例如:
    “day_rating”:“20181225_4”
  • 使用这些属性,您可以按所需的间隔排序,并根据所需的范围筛选值。例如,要获得本月前50名游戏:

    ref.orderByChild("month_popularity").startAt("201812_").endAt("201812~")
    

    <> > <代码> ~只是ASCII中的代码> > <代码>后的一个字符,确保我们在本月之后停止返回结果。

    < P>所有这些都要求您考虑多个属性。由于Firebase实时数据库只能对单个属性进行排序/筛选,因此在不修改数据模型的情况下无法执行这些操作。要想获得一本好的入门书,请在这里阅读我的答案:

    在这种情况下,每个节点需要三个额外属性:

  • 第一次查询时,将月份和流行度相结合的属性。例如:
    “月流行度”:“201812\u 125”
    (如果流行度为125)
  • 用于第二次查询的合并月份和评级的属性。例如:
    “每周评级”:“2018w51\u 4”
  • 用于第三次查询的日期和评级相结合的属性。例如:
    “day_rating”:“20181225_4”
  • 使用这些属性,您可以按所需的间隔排序,并根据所需的范围筛选值。例如,要获得本月前50名游戏:

    ref.orderByChild("month_popularity").startAt("201812_").endAt("201812~")
    


    在ASCII中,
    ~
    只是
    \uu
    后面的一个字符,确保我们不再返回本月的结果。

    您好,您应该参考此链接,它将为您提供答案。但这是Firestore而不是实时数据库,对吗?不,这是实时数据库。所以看了之后,我仍然不知道如何通过Firestore将查询与多个键结合起来。我看到收视率被重新调整,但不是在一定的时间范围内。此外,我更喜欢实时数据库而不是Firestore的答案。(firebase中有2种不同的产品)在我写了下面的答案后,我意识到您可能正在寻找聚合查询,因此数据库确定(例如)所有评级的平均值的查询。这并没有内置到Firebase中(既没有内置到Realtime中,也没有内置到Firestore中)。您必须读取间隔的所有数据并计算客户端,或者必须将聚合值存储在数据库中并在每次写入时更新。您好,您应该参考此链接,它将为您提供答案。但这是Firestore而不是实时数据库,对吗?不,这是实时数据库。所以看了之后,我仍然不知道如何通过Firestore将查询与多个键结合起来。我看到收视率被重新调整,但不是在一定的时间范围内。此外,我更喜欢实时数据库而不是Firestore的答案。(firebase中有2种不同的产品)在我写了下面的答案后,我意识到您可能正在寻找聚合查询,因此数据库确定(例如)所有评级的平均值的查询。这并没有内置到Firebase中(既没有内置到Realtime中,也没有内置到Firestore中)。您必须读取间隔的所有数据并计算客户端,或者必须将聚合值存储在数据库中,并在每次写入时更新它们。谢谢Frank!这真的很有帮助。我在数据库中已经有了聚合,所以这对我来说很好。Fijne kerst;)如果我想让它起作用,我需要在我的数字前加上0,这是对的吗?例如,201812\u 20将在2018\u 100之后排序?或者这不是那样的吗?例如,我可以将上限设为10亿,然后使用201812亿20和201812亿100ah,是的,很好。我忘了那个。您确实需要使用
    0
    s将数字填充到您的案例所需的最大长度。谢谢!到目前为止还不错。我使用firebase越多,效果越好。喜欢。谢谢你,弗兰克!这真的很有帮助。我在数据库中已经有了聚合,所以这对我来说很好。Fijne kerst;)如果我想让它起作用,我需要在我的数字前加上0,这是对的吗?例如,201812\u 20将在2018\u 100之后排序?或者这不是那样的吗?例如,我可以将上限设为10亿,然后使用201812亿20和201812亿100ah,是的,很好。我忘了那个。您确实需要使用
    0
    s将数字填充到您的案例所需的最大长度。谢谢!到目前为止还不错。我使用firebase越多,效果越好。我喜欢。