【问题标题】:Firestore startAfterDocument() skipping documents with same Timestamp valueFirestore startAfterDocument() 跳过具有相同时间戳值的文档
【发布时间】:2020-08-14 23:23:56
【问题描述】:

我在使用 startAfterDocument() 与 Flutter 上的 Firestore 进行分页时遇到了困难。我的理解是,startAfter() 将简单地从索引开始某个值的位置开始,而 startAfterDocument() 将在给定文档之后的索引处开始。

但是,我注意到在使用 startAfterDocument() 时,它会跳过具有相同值的文档。

例如给定以下文档(日期是时间戳):

{id: "1", date: "4-28-2020"}
{id: "2", date: "4-29-2020"}
{id: "3", date: "4-29-2020"}
{id: "4", date: "4-29-2020"}
{id: "5", date: "4-30-2020"}

使用startAfterDocument(doc3),我希望检索到的下一个文档是文档 4,但我得到的是文档 5。它会跳过与给定值相同的所有文档。这是预期的功能吗?我是否需要包含 .where() 以按 id 进行排序才能使其正常工作?

编辑: 这是我正在使用的代码。

CollectionReference orders = Firestore.instance.collection('orders');
Query query1 = orders.orderBy('date').limit(3);
QuerySnapshot querySnapshot = await query1.getDocuments();
DocumentSnapshot lastDoc = querySnapshot.documents.last;

Query query2 = orders.orderBy('date').startAfterDocument(lastDoc).limit(3);
QuerySnapshot querySnapshot = await query2.getDocuments();

使用上面给出的文档,我在query1 上将文档 3 作为 lastDoc,然后在 query2 上,我将文档 5 作为第一个文档,而它应该是文档 4。

编辑:

经过一些进一步的测试,这似乎只发生在时间戳上。

【问题讨论】:

  • 我建议编辑问题以显示未按您预期方式工作的特定代码,以及您正在查询的源数据。我们应该能够根据您提供的内容复制行为。
  • @DougStevenson 已更新。

标签: flutter dart google-cloud-firestore


【解决方案1】:

我认为这可能与orderBy有关?您确定您的查询正在检索与预期相同的订单吗?鉴于某些文档具有相同的date

【讨论】:

  • 我不太确定你在问什么。 orderBy 是两个查询的相同字段。我注意到我的应用程序的一件事是它似乎只发生在时间戳上。
  • 你试过设置光标based on multiple values吗?你可以设置你的IDDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2020-12-26
  • 1970-01-01
  • 2018-09-21
  • 2016-05-18
  • 1970-01-01
  • 2018-01-19
相关资源
最近更新 更多