|
1
105
更新(2019年4月)-fieldvalue.increment(参见大型收集解决方案)和许多问题一样,答案是- 这要看情况而定 . 在前端处理大量数据时应该非常小心。除了让你的前端感觉迟钝, 消防仓库也 charges you $0.60 per million reads 你做到了。 小收藏 (少于100份文件)小心使用-前端用户体验可能会受到影响 在前端处理这个问题应该是可以的,只要您没有对这个返回的数组做太多的逻辑操作。
中等收藏 (100至1000份文件)小心使用-FireStore读取调用可能会花费很多 在前端处理这个问题是不可行的,因为它有太多的潜力来减慢用户系统的速度。我们应该处理这个逻辑服务器端,只返回大小。 这种方法的缺点是,您仍然在调用FireStore读取(等于集合的大小),从长远来看,这可能会使您付出比预期更多的代价。 云功能:
前端:
大型收藏 (1000多份文件)最可扩展的解决方案
As of April 2019 Firestore now allows incrementing counters, completely atomically, and without reading the data prior . 这样可以确保即使同时从多个源更新(以前使用事务解决),我们也有正确的计数器值,同时还可以减少我们执行的数据库读取次数。 通过监听任何文档的删除或创建,我们可以在数据库中的计数字段中添加或删除。 查看FireStore文档- Distributed Counters 或者看看 Data Aggregation 杰夫·德莱尼。他的指导对于任何使用AngularFire的人来说都是非常棒的,但是他的课程也应该延续到其他框架中。 云功能:
现在在前端,您只需查询这个numberOfDocs字段就可以获得集合的大小。 |
|
|
2
18
最简单的方法是读取“querysnapshot”的大小。
您还可以读取“querysnapshot”中docs数组的长度。
或者如果“querysnapshot”通过读取空值为空,则返回布尔值。
|
|
|
3
12
据我所知,这方面没有内置解决方案,目前只能在node sdk中实现。 如果你有 db.collection(“somecollection”)。 你可以用 。选择([字段]) 定义要选择的字段。如果您执行空的select(),您将得到一个文档引用数组。 例子:
此解决方案只是对下载所有文档的最坏情况的优化,不能扩展到大型集合中!
还可以看看这个:
|
|
|
4
7
仔细计算文件数量 大型收藏品 . 如果您想要为每个集合都有一个预先计算好的计数器,那么使用FireStore数据库会有点复杂。 这种代码在这种情况下不起作用:
原因是,正如FireStore文档所述,每个云FireStore触发器都必须是等幂的: https://firebase.google.com/docs/functions/firestore-events#limitations_and_guarantees 解决方案因此,为了防止代码的多次执行,需要使用事件和事务进行管理。这是我处理大型收集计数器的特殊方法:
这里是用例:
如您所见,防止多次执行的关键是 事件ID 在上下文对象中。如果对同一事件多次处理该函数,则在所有情况下,事件ID都是相同的。不幸的是,您的数据库中必须有“事件”集合。 |
|
|
5
4
不,目前没有对聚合查询的内置支持。不过,您可以做一些事情。 第一个是 documented here . 您可以使用事务或云功能来维护聚合信息: 此示例演示如何使用函数跟踪子集合中的评级数量以及平均评级。
如果您只想不经常地对文档进行计数,那么JBB提到的解决方案也很有用。确保使用
|
|
|
6
4
我同意@matthew,会的 花了很多钱 如果您执行这样的查询。 [在启动项目之前为开发人员提供建议]
因为我们在一开始就已经预见到了这种情况,所以实际上我们可以创建一个集合,即带有文档的计数器,将所有计数器存储在具有类型的字段中。
例如: 对于集合上的每个CRUD操作,更新计数器文档:
下次,当您想要获取集合的数量时,只需要查询/指向文档字段。[1读取操作] 此外,您可以将集合名称存储在一个数组中,但这很困难,FireBase中的数组条件如下所示:
因此,如果您不打算删除集合,那么实际上可以使用数组存储集合名称列表,而不是每次查询所有集合。 希望有帮助! |
|
7
2
递增计数器使用 admin.firestore.FieldValue.increment :
在这个例子中,我们增加一个
增量在内部是事务性的,但是您应该使用 distributed counter 如果你需要增加的频率超过每1秒一次。
通常最好实施
|
|
|
8
0
没有直接选项可用。你不能这样做
1:-获取集合中的所有文档,然后获取其大小。(不是最佳解决方案)
通过使用上面的代码,您的文档读取量将等于集合中文档的大小,因此必须避免使用上面的解决方案。 2:-在集合中创建一个单独的文档,该文档将存储集合中的文档数。(最佳解决方案)
上面我们创建了一个名为counts的文档来存储所有的count信息。您可以按以下方式更新count文档:
W.R.T价格(文件读取=1)和快速数据检索上述解决方案是好的。 |
|
|
9
0
我花了一段时间根据上面的一些答案来完成这项工作,所以我想我会把它分享给其他人使用。希望它有用。
|
|
|
10
-1
|