如何在Firestore中通过查询从索引到其他索引获取大量文档

时间:2018-01-12 04:43:14

标签: angular firebase google-cloud-firestore

我想对存储在云Firestore中的数据进行分页。它看起来像是:

enter image description here

注意,它与加载更多或无限加载不同。让我们假设,当用户点击寻呼机3 时,我需要向我的Firestore发出请求,要求从位置50到75获取25个项目(每页25个项目)。

我应该这样做:

db.collection("cities")
    .orderBy("population")
      .startAfter(lastVisible)
        .limit(25);

这里的问题是我没有lastVisible。我知道我们可以通过获得前50项获得lastVisible,但它是如此愚蠢,因为如果我喜欢这样,为什么不这样做? 我只获得前75个项目,并在客户端过滤我们想要的内容。

问题是:如何通过Firestore中的查询从索引到其他索引获取大量项目?

任何帮助,将不胜感激!非常感谢!

3 个答案:

答案 0 :(得分:5)

更新回答:

您可以维护一个大小数组作为决定的页数。每个索引的值将表示startAt字段的cities字段值。

此外,您还将保留文件的计数。这将帮助您提供限制值(count / numberOfPages)。

您将在云功能触发器的帮助下维护这两者,如前所述here

答案 1 :(得分:0)

经典分页非常适合与表格结合使用,遗憾的是当时Firestore并未得到很好的支持。 Classic Pagination

我建议您将限制数据的方法转换为 Infinte-Scroll

Infinite Scrolling

结合强大的过滤选项,您可以存档更好的用户体验

您可以在Firebase文档中找到一个方便的示例:https://firebase.google.com/docs/firestore/query-data/query-cursors#paginate-a-query

更多信息:
https://uxplanet.org/ux-infinite-scrolling-vs-pagination-1030d29376f1

答案 2 :(得分:0)

您可以将文档 ID 推送到数组并使用

查询集合
firebase.firestore().collection("users").where(firebase.firestore.FieldPath.documentId(), "in", array)

您可以进一步检索数组索引在(pages10 and pages-110) 之间的数组,其中 page 是您的当前页面