在 Firebase 中对大量数据进行分页和过滤的最佳方法是什么?

Ali*_*lli 15 pagination large-data firebase google-cloud-platform google-cloud-firestore

我有一个包含 10,000 个文档的大型 Firestore 集合。

我想通过一次分页和过滤 25 个结果来在表格中显示这些文档。

我的想法是,为了限制“读取”(从而降低成本),一次仅请求 25 个文档(使用“限制”方法),并在页面更改时加载接下来的 25 个文档。

但有一个问题。为了显示页数,我必须知道文档的总数,并且我将被迫查询所有文档才能找到该数字。

我可以选择无限滚动,但即使在这种情况下,我也永远不会知道我的过滤器找到的结果总数。

另一种选择是在开始时请求所有文档,然后使用客户端进行分页和过滤。

那么,在这种情况下通过优化性能和成本来显示数据的最佳方式是什么?

谢谢!

Ren*_*nec 8

您将在 Firestore 文档中找到专门用于使用查询游标对数据进行分页的页面。

我在这里粘贴“将查询游标与方法结合起来”的示例limit()

var first = db.collection("cities")
        .orderBy("population")
        .limit(25);

return first.get().then(function (documentSnapshots) {
  // Get the last visible document
  var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1];
  console.log("last", lastVisible);

  // Construct a new query starting at this document,
  // get the next 25 cities.
  var next = db.collection("cities")
          .orderBy("population")
          .startAfter(lastVisible)
          .limit(25);
});
Run Code Online (Sandbox Code Playgroud)

如果您选择无限滚动,您可以通过查看 的值轻松知道是否已到达集合的末尾documentSnapshots.size。如果它低于 25(示例中使用的值),您就知道已到达集合末尾。


如果您想显示集合中的文档总数,您应该使用聚合查询