Python如何获取Firestore中所有文档对应子集合下的全部文档
Python读取Firestore指定顶层集合下所有user子集合数据的方案
前置准备
- 先安装Firebase Admin Python SDK:
pip install firebase-admin - 提前在Firebase控制台下载你的项目服务账号JSON密钥文件
实现方式(两种可选)
方式1:遍历顶层文档后逐个读取子集合
适用场景:需要同时获取顶层文档信息,或需要先对顶层文档做过滤
import firebase_admin from firebase_admin import credentials from firebase_admin import firestore # 初始化Firebase客户端 cred = credentials.Certificate("替换为你的服务账号密钥文件路径.json") firebase_admin.initialize_app(cred) db = firestore.client() # 替换为你自己的顶层集合名称 TOP_COLLECTION_NAME = "你的顶层集合名" all_user_records = [] # 遍历顶层集合的所有文档 for top_doc in db.collection(TOP_COLLECTION_NAME).stream(): # 读取当前顶层文档下的user子集合的全部文档 for user_doc in top_doc.reference.collection("user").stream(): # 组装数据,可按需保留文档ID等元信息 record = user_doc.to_dict() record["user_doc_id"] = user_doc.id record["parent_top_doc_id"] = top_doc.id all_user_records.append(record) # 打印所有查询结果 for record in all_user_records: print(record)
方式2:使用集合组查询(更高效)
适用场景:只需要获取所有user子集合的文档,无需遍历顶层集合
注意:首次使用集合组查询前,需要在Firestore控制台为
user集合创建集合组索引,按照控制台弹出的提示创建即可,无需额外配置
import firebase_admin from firebase_admin import credentials from firebase_admin import firestore # 初始化Firebase客户端 cred = credentials.Certificate("替换为你的服务账号密钥文件路径.json") firebase_admin.initialize_app(cred) db = firestore.client() all_user_records = [] # 直接全局查询所有名为user的子集合 for user_doc in db.collection_group("user").stream(): record = user_doc.to_dict() record["user_doc_id"] = user_doc.id # 通过引用层级获取对应的顶层文档ID record["parent_top_doc_id"] = user_doc.reference.parent.parent.id all_user_records.append(record) # 打印所有查询结果 for record in all_user_records: print(record)
两种方案返回的结果结构完全一致,如果你需要对user文档的字段做条件过滤,直接在查询后添加where()方法即可,集合组查询也支持条件筛选。
内容的提问来源于stack exchange,提问作者ernest fokam
相关产品推荐
相关产品推荐

