如何知道实现分页时Firestore查询将返回多少个项目

时间:2019-06-20 16:36:14

标签: javascript firebase google-cloud-firestore

Firestore提供了有关如何对查询进行分页的指南:

Firestore - Paginate data with query cursors

它们显示以下示例:

  

分页查询

     

通过将查询游标与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);
});

问题

我得到了示例,但是我如何知道该查询将返回多少个项目(总共,没有限制限制)?我需要用它来计算页面数并控制分页组件,对吗?

我无法在不知道限制的情况下简单地显示下一个和后退按钮。

应该怎么做?我想念什么吗?

2 个答案:

答案 0 :(得分:1)

您无法事先知道结果集的大小。您必须分页浏览所有结果以获取总大小。这类似于无法在不将自己记录在其他地方的情况下就知道集合的大小,这只是无法扩展,无法以Cloud Firestore扩展的方式提供此信息。

答案 1 :(得分:1)

这是不可能的,因为迭代器是通过gRPC流获取的,所以迭代器无法知道它包含多少文档。

但是有一种解决方法...但是您必须做一些事情:

1)在firebase文档中编写一个计数器,您可以在进行交易时增加或减少

2)将计数存储在新条目的字段中,例如position 10之类。

然后在该字段(位置DESC)上创建索引。

这样,您可以对where(“ position”,“ <”,N).orderBy(“ position”,DESC)进行skip + limit

这很复杂,但是可以解决问题