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

Javascript 如何知道在实现分页时Firestore查询将返回多少项,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,Firestore提供了有关如何为查询分页的指南: 它们显示了以下示例: 为查询分页 通过组合查询游标和limit()方法对查询进行分页。例如,使用批中的最后一个文档作为下一批的光标起点 var first = db.collection("cities") .orderBy("population") .limit(25); return first.get().then(function (documentSnapsho

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);
});
问题

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

我不能在不知道限制的情况下简单地显示“下一步”和“上一步”按钮


应该怎么做?我遗漏了什么吗?

您无法提前知道结果集的大小。您必须翻阅所有结果才能获得总大小。这类似于在不记录自己在其他地方的信息的情况下无法知道集合的大小,只是无法以Cloud Firestore需要扩展的方式提供此信息。

您无法提前知道结果集的大小。您必须翻阅所有结果才能获得总大小。这类似于在不记录自己在其他地方的信息的情况下无法知道集合的大小——以Cloud Firestore需要扩展的方式提供此信息是不可扩展的。

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

但是有一个解决办法。。。但你必须做一些东西:

1) 在firebase文档中编写一个计数器,可以增加或减少事务中的所有内容

2) 将计数存储在新条目的字段中,如
position
10或其他内容

然后在该字段上创建索引(位置描述)


通过这种方式,您可以使用where(“position”,“进行skip+限制。这是不可能的,迭代器无法知道它包含多少文档,因为它们是通过gRPC流获取的

但有一个解决办法……但你必须做一些事情:

1) 在firebase文档中编写一个计数器,可以增加或减少事务中的所有内容

2) 将计数存储在新条目的字段中,如
position
10或其他内容

然后在该字段上创建索引(位置描述)


通过这种方式,您可以使用where(“position”,”进行跳跃+限制谢谢!但在本例中,您假设我查询的是没有任何
where
子句的所有文档的完整集合,对吗?如果我筛选的是一些满足特定条件的文档呢?谢谢!但在本例中,您假设我查询的是没有任何
where
子句的所有文档的完整集合,r是吗?如果我正在筛选一些符合特定标准的文档呢?如果我翻阅所有文档,我基本上会阅读(并付费阅读)所有文档,对吗?一种方法是跟踪上一页和下一页的存在,至少禁用按钮。这似乎是一个常见的用例(比如给页面编号和显示搜索结果编号)。你看到过人们如何绕过这一限制的例子吗?谢谢!是的,你必须阅读所有的文档。你必须找到一个你认为可以接受的折衷方案,以满足你的特定需要。如果我翻阅所有内容,我基本上就是在阅读(并付费阅读)所有文档,对吗?一种方法是跟踪上一页和下一页的存在,至少禁用按钮。这似乎是一个常见的用例(如为页面编号和显示搜索结果编号).你有没有看到人们如何绕过这一限制的例子?谢谢!是的,你必须阅读所有的文件。你必须找到一个你认为可以接受的、适合你具体需要的折衷方案。