[英]How to get a count of the number of documents and the id's of these, in a collection with Cloud Firestore
[英]Most efficient approach to count documents in one or more Firestore collection(s)
我正在开发一个交付应用程序,我想获取管理员分析的计数(订单数量,通过签证支付的订单数量等......)。 我试图阅读所有文档并获取快照计数,但我发现这会花费我大量的阅读时间,如果数据集很大,它会减慢我的应用程序。 因此,我创建了一个名为 counts 的集合,并创建了一个云 function 来侦听文档创建并增加计数集合中用户文档中的计数字段,它运行良好,但我想知道它是否会花费我一大笔钱如果有更好的解决方案。 注意:我会听 5+ collections
这是我的 function:
const functions = require('firebase-functions');
// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();
var firestore = admin.firestore();
// Listens for any document created in the users collection
exports.createUser = functions.firestore
.document('users/{userId}')
.onCreate((snap, context) => {
firestore.collection('counts').doc('users').update({ count: admin.firestore.FieldValue.increment(1) })
return 'done';
});
我创建了一个云 function 来监听文档创建并增加计数集合中用户文档中的计数字段。
这确实是满足您要求的最佳解决方案之一。 请注意,如果写入“主集合”(即 5 个以上集合)的频率非常高,以至于计数器文档的更新次数可能超过每秒一次,您可以使用一组 分布式计数器。
我想知道这是否会花费我一大笔钱
每次创建文档时,更新计数器的成本对应于一次 Firestore 写入和一次 Cloud Function 调用(可能还有一些出站网络成本,具体取决于您的 Firestore 数据库和 Cloud Function 的位置,请参见此处和此处)。 会不会花“一大笔钱”? 这完全取决于在“主集合”中创建的文档数量以及您想要读取这些计数器的次数。
如果你一年读一次这些计数器,查询 5 collections 的所有文档可能会更实惠。 但是,如果您每天或每周阅读一次,并且那些 collections 有“很多文档”,那么使用云 Function 可能会更实惠。 根据您是唯一知道(或唯一能够估计的)的一些数字,您可以进行数学计算以评估首选方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.