如何使用Python统计Firestore中值为true的'In'字段总数
Firestore 统计字段
In值为true的文档总数实现方案 你已经完成了Firestore客户端初始化,self.db为可用的数据库实例,可直接用下面两种方案实现统计:
方案1:使用官方count聚合查询(推荐,成本最低)
Firestore原生支持服务端count聚合,不需要把匹配文档全量拉到本地,读成本仅和匹配文档数挂钩,是官方推荐的计数实现方式。
可直接在你的类中添加如下统计方法:
from firebase_admin import firestore def count_in_true_records(self, target_collection: str): # 构造筛选条件:匹配字段In值为布尔True的文档 match_query = self.db.collection(target_collection).where( filter=firestore.FieldFilter("In", "==", True) ) # 发起聚合计数请求 count_resp = match_query.count().get() # 解析返回的统计结果 total_count = count_resp[0][0].value return total_count
调用时把target_collection参数替换成你实际存储数据的集合名即可,如果数据存放在子集合,把集合路径补全到对应层级再挂筛选条件就行。
方案2:本地遍历计数(适配旧版SDK,大数据量不推荐)
如果你使用的firebase-admin版本过低不支持count聚合,可以拉取所有匹配文档在本地计数,注意集合文档量过千/万时会产生较高的读费用,仅适合小数据量场景使用。
实现代码:
def count_in_true_records_old_sdk(self, target_collection: str): total_count = 0 # 筛选匹配文档,仅拉取In字段减少网络传输量 match_query = self.db.collection(target_collection).where("In", "==", True).select(["In"]) # 遍历流式返回的结果计数 for _ in match_query.stream(): total_count += 1 return total_count
注意事项
- 统计方法必须在
build方法执行完成、self.db成功赋值后调用,否则会抛出客户端未初始化的错误 - 单字段等值查询的索引Firestore会自动创建,首次运行如果抛出索引缺失错误,直接按照错误提示跳转控制台完成索引创建即可,单字段索引一般1分钟内即可生效
- 参考数据库结构示例:

内容的提问来源于stack exchange,提问作者I'm a Studnet
相关产品推荐
相关产品推荐

