【问题标题】:Firestore startAfter(), How to know when no more to loadFirestore startAfter(),如何知道何时不再加载
【发布时间】:2020-06-21 07:13:58
【问题描述】:

刚刚第一次实现了“startAfter”。但是,搜索了一下,我找不到我遇到的问题的答案。

当使用“start after”时没有更多要加载的文档时如何最好地处理。

我是否应该在每次触发“加载更多”功能时获取集合的总文档长度。检查总和电流,如果它们相等,请禁用加载更多功能?

如果是这样,我如何找到集合文档的总数?

【问题讨论】:

    标签: firebase vue.js google-cloud-firestore


    【解决方案1】:

    我是否应该在每次触发“加载更多”功能时获取集合的总文档长度?

    没有。当我们创建分页算法时,我们总是对以较小的块加载数据感兴趣。在 Firestore 中,我们总是对我们获得的每个新块的大小感兴趣。所以基本上,如果新块的大小小于我们设置的限制,例如每页 10 个项目,那么此时您应该禁用“加载更多功能”。

    所以这个想法是你可以请求一定大小的数据页面。这是一个名为limit(X) 的有用方法,可以帮助您实现这一目标。因此,您可以执行查询并获得大小为X 的页面。只需使用另一个大小为X 的页面继续该查询,依此类推。因此,您从页面1 开始,然后使用相应的方法浏览页面,您应该指定哪个文档是页面上的最后一个文档,然后继续获取下一页,直到没有剩余元素为止。

    如果是这样,我如何找到集合文档的总数?

    您需要担心的不是集合中文档的数量,而是您在下一页中获得的项目数量。

    【讨论】:

    • 不错的答案@alexmamo!如果可以的话,我会补充一点,以查找集合文档的总数,您应该查询整个集合(显然不推荐)或维护文档计数器,例如使用distributed counter。但正如你所说,这不是分页所必需的。
    • 我也很确定您是否从一个限制为 10 个的集合中请求文档,该集合只有 10 个文档,并且您使用 startAfter 和最后一个文档来获取第二页,因为查询返回 0 个文档,您不会为第二个“加载更多”查询支付任何读取费用。
    • @RenaudTarnec 感谢 Renaud 的评论。了解这些分布式计数器真的很有帮助。
    • @samthecodingman 有a minimum of one document read,即使查询没有产生文档
    • 嗨,KJParker!我可以帮助您了解其他信息吗?如果您认为我的回答对您有所帮助,请考虑采纳(✔️)。我真的很感激。谢谢!
    【解决方案2】:

    你可以做的就是将最后一个可见文档保存到一个变量中,就像这样

    lastVisible = querySnapshot.docs[querySnapshot.docs.length - 1]
    

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2020-03-26
      • 1970-01-01
      相关资源
      最近更新 更多