Firestore查询patients集合时客户端过滤是否按全量文档计读操作费?
Firestore读计费及查询优化问题解答
- 问题1解答:是,会按照10000次读操作计费。你调用
firestore.collection('patients').snapshots()时没有添加任何查询过滤条件,Firestore服务端会返回集合内所有文档,每返回1条文档就计1次读操作,因此10000条文档会产生10000次读计费。后续流监听过程中只有发生新增、修改、删除的变动文档才会额外产生读计费,不会重复收取全量文档的读费用。 - 问题2解答:依然按照10000次读操作计费。在
StreamBuilder的builder中做过滤属于客户端本地数据处理,此时Firestore服务端已经将全量10000条文档返回给了客户端,计费统计以服务端实际返回的文档数量为准,和你本地是否使用、使用多少条返回数据无关。 - 问题3解答:有成熟方案可以在服务端完成过滤,避免拉取全量数据。你可以在构造Firestore查询时添加
where过滤条件,由服务端筛选后仅返回符合要求的文档,参考实现代码如下:
Stream<List<Patient>> getUSAPatients() { return FirebaseFirestore.instance .collection('patients') // 服务端直接过滤country字段等于USA的文档 .where('country', isEqualTo: 'USA') .snapshots() .map((querySnapshot) => querySnapshot.docs .map((doc) => Patient.fromFirestore(doc)) .toList()); }
使用该查询后,服务端仅会返回符合条件的100条文档,只会产生100次读计费,同时也能减少网络传输量,提升页面加载速度。单字段相等查询默认使用Firestore内置索引,不需要额外配置即可直接使用。
内容的提问来源于stack exchange,提问作者Njm Jeb
相关产品推荐
相关产品推荐

