firebase - Flutter & Firestore - 关于“startAfter”分页的问题
问题描述
我可以使用“startAfter”和“limit”进行分页,但它有错误。
例如,在 Firestore DB 中,我有 7 条记录:
{"title": "item1", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item2", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item3", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item4", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item5", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item6", "create_datetime": "2018-11-11 11:11:11"}
{"title": "item7", "create_datetime": "2018-12-22 22:22:22"}
当页面大小为 5 时,第一页是可以的,因为我使用了:
.orderBy('create_datetime').limit(5)
它给了我项目 1-5。
当它加载第二页时,我使用了:
.orderBy('create_datetime').startAfter(['2018-11-11 11:11:11']).limit(5)
问题是第二页结果只有 item7,item6 消失了。“startAt”也有同样的问题。
我真的希望它具有“偏移”功能。有没有人有解决方案?
解决方案
您的查询将始终返回“item7”,因为您总是在之后开始,2018-11-11 11:11:11
因此它将忽略所有其他项目并转到最后一项2018-11-11 11:11:11
并从那里跳过。您需要获取返回的最后一项并保留对它的引用,然后在您的 startAfter 使用文档引用开始之后。通常,flutter 的 startAfter 需要一个列表来保留对它的引用。
推荐阅读
- cygwin - 在 Cygwin 中安装 dc
- c# - 反序列化嵌套的 JSON 字符串,无法访问属性
- swift - 是否可以在与 swift 中的多个键关联的字典中拥有相同的集合实例?
- c++ - 使用 sfinae 进行模板模板参数推导
- angular - 带有可排序标题的 Angular 5 材料表
- hyperledger-fabric - Hyper Fabric [fabric-sdk-go] 错误:CONNECTION_FAILED。说明:拨号连接超时
- protocol-buffers - 如何使 protobuf 不区分大小写?
- vba - Excel VBA - 如何使用 ByVal
- python - 避免大型 Pandas DataFrame 上 GroupBy 的内存问题
- java - 我如何将 JProgressBar 放入 java 中的 JOptionPane 中?