Firestore监听根集合new_letters是否会读取嵌套子集合数据?
问题解答
第一个疑问解答
你当前的监听代码只会读取new_letters根集合的直属文档,不会同步读取任何嵌套子集合的数据。
Firestore的所有集合查询默认都是浅查询,仅返回目标集合下的直属文档,不会递归拉取文档内嵌套的子集合内容。你代码里的监听触发时,根集合有多少个直属文档就产生对应次数的读计费,子集合内的所有数据都不会被读取,不会产生额外成本。
另外需要注意你给出的示例代码存在API使用错误:ref()是Realtime Database的方法,Firestore获取集合需要用collection(),修正后的写法如下:
let counter = 0; firebase.firestore().collection("new_letters").onSnapshot(snapshot => { counter = snapshot.size });
第二个疑问解答
首先你当前的原生方案本身就不会拉取嵌套子集合数据,不存在额外开销。如果你的new_letters根集合文档量很小(长期不超过百级),直接用上面修正后的方案就足够,是性价比最高的选择。
如果根集合文档量很大(千级及以上),全量拉取所有文档统计数量的读成本会很高,此时可以选择维护计数器,也并非只能用Realtime Database实现:你可以通过Cloud Functions设置触发器,每当new_letters下有文档新增/删除/归档时,自动更新一个专门存储计数的独立文档的数值,你只用监听这个单文档即可,每次监听仅产生1次读操作,是资源消耗最低的大规模场景方案。
内容的提问来源于stack exchange,提问作者Kubaghetto the fresh Testobun
相关产品推荐
相关产品推荐

