在Firestore获取指定文档时能否额外添加where查询条件?
Firestore指定文档查询附加过滤条件的实现方案
首先明确:你原本的写法不可行,where()是集合引用(CollectionReference) 专属的方法,不能在单个文档引用(DocumentReference)上直接调用。
你需要的「仅获取同时匹配额外字段条件的指定ID文档、减少不必要读取」的需求可以实现,实现方式是在集合查询中同时添加文档ID和目标字段的过滤条件,代码示例如下:
db = firestore.client() dockey = 'mykey' # 在集合上同时过滤文档ID和自定义字段 docs = db.collection(u'mydocuments')\ .where(u'__name__', u'==', dockey)\ .where(u'field', u'==', u'one')\ .get() # 按唯一ID过滤最多只会返回1条结果 if docs: target_doc = docs[0] # 后续文档处理逻辑 else: # 文档不存在,或不匹配附加的字段条件 pass
实现说明
- Firestore内置的
__name__字段对应文档的唯一ID,你可以把它当作普通字段来添加过滤条件 - 该查询方式只会产生最多1次读取计费:匹配到结果计1次,没有匹配到不会产生读取费用,完全符合你减少读取次数的需求
- 不要先获取文档再判断字段是否符合条件,该方式无论字段是否匹配都会产生1次读取费用,使用上述组合查询可以避免不必要的计费
内容的提问来源于stack exchange,提问作者ByronSchuurman
相关产品推荐
相关产品推荐

