如何获取Firestore嵌套随机文档下的teacher与advisor字段值
核心错误原因
你现有代码存在3处逻辑错误:
doc = doc_ref.get缺少方法调用的括号,且该行属于冗余代码,未参与后续查询逻辑- 调用
doc_ref.collection('school').document()时不传参数会生成全新的随机文档ID,指向不存在的空文档,而非你已有的存量随机文档;后续额外调用的collection()无意义,不存在对应层级的嵌套集合 stream()返回的是文档快照迭代对象,不能直接调用to_dict()方法,需要遍历迭代器拿到单个文档后再做格式转换
修复后代码
import json # 定位到ppl/1下的school集合 school_ref = db.collection('ppl').document('1').collection('school') result = [] # 遍历school下所有随机生成的文档 for doc_snap in school_ref.stream(): doc_data = doc_snap.to_dict() # 提取jobname下的目标属性 if 'jobname' in doc_data: result.append({ 'teacher': doc_data['jobname'].get('teacher'), 'advisor': doc_data['jobname'].get('advisor') }) # 转换为JSON格式 document_output = json.dumps(result, ensure_ascii=False) print(document_output)
额外说明
如果只需要取school集合下的任意1个文档的属性,可以在遍历前加limit(1)减少查询量:
for doc_snap in school_ref.limit(1).stream(): # 后续逻辑和上面一致
内容的提问来源于stack exchange,提问作者jpy
相关产品推荐
相关产品推荐

