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

Firebase Firestore按ServerTimestamp和FirebaseUI Firestore分页排序集合

暨弘毅
2023-03-14

我们知道您可以将@ServerTimestamp注释用于集合中文档的属性,例如createdAt(在文档插入集合时,Firebase结构会自动分配日期),这是一个出色的Firebase功能。.

但是,当需要从集合中获取文档列表时,只需按createdAt降序排序:

private Query mQuery = mFirestore.collection ("collection"). orderBy
("createdAt", Query.Direction.DESCENDING);

众所周知,将数据立即加载到recyclerview中是一种不好的做法。我发现FirebaseUI适配器已经可以用于数据分页,这太棒了。

然后问题出现了:Firebase Firestore在“保存”文档时似乎无法使用此静态日期,因为使用分页返回文档时,会引发异常

JAVAlang.IllegalArgumentException:查询无效。您正在尝试使用字段“createdAt”是未提交的服务器时间戳的文档启动或结束查询。(由于此字段的值未知,因此无法使用它开始/结束查询。)

例外情况非常清楚和聪明。但是,如何“冻结”文档创建时间?

我无法处理用户的本地时钟,毕竟该应用程序将在不同的位置使用,这会“弄乱”查询的返回。此外,android用户可以简单地设置错误的时钟来操纵结果。

可能在特定集合中的每个文档中都有一些“隐藏”计数器属性。这将使工作更加容易,但不需要进行这种手动代码端控制

有人遇到过这个问题吗?你能给我一些建议吗?

共有2个答案

慕铭
2023-03-14

简单的、面向问题的解决方案是在Firebase中开发一个函数来返回服务器日期并简单地将其插入集合中。

当然,在我看来,重做控制盘或要求增强Firebase UI组件并不是一个聪明可行的解决方案,而且还需要进行未来的更改。

在我需要插入的每个集合中,只需参考“时刻”并将结果用作属性。

简单有效,不依赖于第三方组件代码的调整,这些代码工作得很好。

作为对firebase团队的建议,请给出一些触发器示例,在插入时可以将日期作为简单的静态属性。

杜烨伟
2023-03-14

Cloud Firestore有一种处理尚未提交的服务器时间戳的方法。DocumentSnapshot有不同的字段访问器方法(如getData()),这些方法使用ServerTimestampBehavior枚举来指示SDK应该将哪些作为服务器时间戳字段的值。其中一个选项是估计价值。我猜这使得DocumentSnapshot可以参与分页。

然而,FirebaseUI似乎没有使用这些枚举。如果是这种情况,您必须:

  1. 创建您自己的适配器,而不是使用Firebase UI
  2. 修改[来自GitHub的Firebase UI源代码][3]以执行您想要的操作
  3. 在GitHub上提交问题并等待它是否得到实施。
 类似资料:
  • 我正在尝试在spring MVC中实现分页和排序。根据我的理解,我们可以使用PagingAndSortingRepository或JpaRepository(http://springinpractice.com/2012/05/11/pagination-and-sorting-with-spring-data-jpa)。 但这两种方法都使用默认的findAll方法来执行此操作。 我希望创建我自

  • 分页 使用 limit 和 offset 来控制分页数据: limit 指定该请求返回的结果个数 offset 偏移量,指定该请求返回的结果的起始位置 默认 limit 为 20, offset 为 0,我们也可以手动指定 limit 和 offset 来控制。例如,每页展示 100 条数据,需要获取第五页的数据,将 limit 设置为 100、offset 设置为 400 即可。limit 最大

  • {% tabs first=”SDK 1.1.0 及以上版本”, second=”SDK 1.1.0 以下版本” %} {% content “first” %} SDK 1.1.0 及以上版本 分页 使用 limit 和 offset 来控制分页数据: limit 指定该请求返回的结果个数 offset 偏移量,指定该请求返回的结果的起始位置 默认 limit 为 20, offset 为 0,

  • 我正在尝试使用Elasticsearch(2.4)聚合对使用该查询的多个索引按“productId”分组 1) 我想按分数排序,所以我尝试使用 哪个返回 2) 此外,我正在尝试使用分页,“size”键实际起作用,但“from”键不起作用 **更新-聚合结果示例** 希望有人能帮忙

  • 我们必须按降序对数组进行部分排序。 我知道d::partial_sort但它是按升序排列的。 http://en.cppreference.com/w/cpp/algorithm/partial_sort. 是他们的任何其他这样的功能,可以这样做,或任何快速算法这样做。

  • 本文向大家介绍SpringBoot2 实现JPA分页和排序分页的案例,包括了SpringBoot2 实现JPA分页和排序分页的案例的使用技巧和注意事项,需要的朋友参考一下 分页 application.yml 实体类 Repository接口类 service 接口类 Service 实现类 Controller控制器类 分页显示的json格式串 http://localhost:8080/emp