【发布时间】: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