当前位置: 首页 > 知识库问答 >
问题:

我如何在时间戳和分数上订购我的收藏

富勇军
2023-03-14

我有一个文档集合,其中包含一个createdAt时间戳和一个分数。我为我们的排行榜排序所有得分的文档。但现在我也要有每天最好的。

MatchResults.orderBy("得分"). place("createdAt","

但我发现,使用不同的字段时存在局限性。

https://firebase.google.com/docs/firestore/query-data/order-limit-data#limitations.

那么,我如何才能得到今天的结果,按分数排序为10块?

共有1个答案

羿经武
2023-03-14

您可以使用多个orderBy(…)子句在多个字段上排序,但这不能完全满足您的需要,因为您必须首先按时间戳排序,然后按分数排序。

一个蛮力选项是获取给定日期的所有分数,并在本地截断列表。但如果要加载数千个分数,那么这当然不会很好。

一个简单的答案是使用日期戳而不是时间戳:

matchResults.where("dayCreated", "=", "YYYY-MM-DD").orderBy("score").startAt(...).limit(10)

第二个简单的答案是在写入事件上运行Cloud Function并维护与您的分数数据分开的每日最高分数表。如果经常查看结果,这最终将证明更经济和可扩展,因为您每天只需要记录一小部分子集(例如前100名),并且可以简单地按分数查询该表的排序。

记分牌在规模上极其困难,因此不要低估处理每个边缘情况的复杂性。从小而实用开始,专注于在写入期间聚合结果,并保持读取小而简单。通过仅列出“最高分数”记录的最高百分比来限制范围,并尽可能跳过复杂的分页模式。

 类似资料:
  • 我正在使用一个rest api,其中我以以下格式获取时间:“timestamp”:1617894664,我没有适当的api文档,我需要将其转换为正常时间并在应用程序中显示。如果有人有什么想法,请分享。赞赏。 谢谢.

  • 问题内容: 我有一些以秒为单位的时间戳(即Unix时间戳)的JSON: 要求Jackson将其反序列化为带有DateTime字段的对象作为时间戳,结果是在该时间段后不久的某个时间,因为Jackson假设它以 毫秒为单位 。除了撕开JSON并添加一些零外,我如何让Jackson理解 秒 时间戳? 问题答案: 我编写了一个自定义反序列化器,以秒为单位处理时间戳(Groovy语法)。 然后,我注释了PO

  • 问题内容: 即使现在,我们也可以使用packageId 240订购Endurance Storage。但是,最近有了Endurance Storage的更新,它可以在静止状态下进行加密并在更细粒度的级别上进行选择,例如1、2、3 … TB,而不是1、2、4 … TB。 然后,我们似乎不得不使用另一个名为“存储即服务(StaaS)”的软件包759。 这是我们的尝试。你能澄清出什么问题吗? 我们的目标

  • 看起来(也许我错了),如果您想要保留JDBC和Postgres发生的事情的时区,您需要将时区与时间戳分开存储。 也就是说,我更愿意给我的ORM/JDBC/JPA一个Java(或Joda),其中包括时间区域到Postgres字段。我希望在检索时,不管服务器的时区(或默认为UTC)如何,都能返回一个,时区为。但只需看看大多数JDBC代码(以及依赖于它的事情不会发生)。 这是正确的吗? 当postgre

  • 我已经创建了一个基本的SNS话题。这是一个HTTP(和HTTPS)请求,在我的web服务器上的一个endpoint。web服务器不在AWS上。 SNS订阅指向的endpoint向我发送包含请求的所有标头的电子邮件。即使邮件头是空的,也会发送电子邮件。任何类型的请求都会产生一封电子邮件。 无论使用什么HTTP谓词(GET、POST等),endpoint都将处理请求。 我认为这可能是我使用一个加密SS

  • 问题内容: 我正在尝试从Firebase订购数据,因此最近的帖子位于顶部(如Instagram),但我无法使其正常运行。我应该使用服务器时间戳吗?是否有一个“ createdAt”字段? 问题答案: 仅对数组使用 reverse() 不足以包含所有内容。您需要考虑不同的事情: 在检索数据时进行限制,请使用 append() ,然后使用 reverse() 可以节省时间。您不需要每次都删除所有数组。