在Firestore中获取查询的大小

时间:2019-01-24 13:27:55

标签: javascript firebase google-cloud-firestore google-cloud-functions

如何从具有数千个文档的Firestore集合中有效地获取整个查询的大小?

就我而言,我通过一些不同的规则查询文档:

  • 开始日期
  • 结束日期
  • 地点ID
  • 关键字

然后,我将查询限制为仅显示50条记录,但是我需要获得没有此限制的查询的大小,因为这样分页才能在前端正确显示。

我可以使用云功能,该功能与之前的查询相同,但没有限制,然后获取它的大小,但是有没有更有效的方法?查询大小可能是成千上万的文档,所以这样做会不会有性能问题?在这种情况下,计费如何运作?

如果是。我的查询是1500个文档,是否会有1500次读取操作才能获得此查询的大小?

还有其他一些主题建议使用计数器来获取集合的大小,但这不适合我的方法,因为大小取决于上述用户的搜索参数。

欢迎对此问题提出所有建议!

1 个答案:

答案 0 :(得分:3)

如果一个集合中有成千上万的文档,则可能需要经常更新计数器。在Cloud Firestore中,您只能每秒更新一次文档,这对于某些高流量的应用程序可能太低了。

  

查询大小可能是成千上万个文档,所以这样做会不会有性能问题?

不,不会。根据有关Firestore counter的官方文档,您可以使用分布式计数器:

  

要支持更频繁的计数器更新,请创建一个分布式计数器。每个计数器都是带有“碎片”子集合的文档,计数器的值是碎片值的总和。

这种做法可以帮助您实现所需的目标。

  

在这种情况下计费如何工作?

如果您想一次读取整个馆藏,则需要为每个读取的文档进行读取操作。

  

我的查询是1500个文档,是否会有1500次读取操作才能获得此查询的大小?

如果要遍历整个集合以获取文档数,是的。

有关存储计数器的更多详细信息,请参阅此 post 中答案的最后部分:

  

作为个人提示,请勿将这种计数器存储在Cloud Firestore中,因为每次您增加或减少计数器时,都会花费readwrite操作。将此计数器免费托管在Firebase Realtime数据库中。