如何使用Firebase Firestore查询获取外层集合文档中子集合内的文档
解决Firestore获取多层子集合文档的问题
Firestore的常规路径查询不支持用*作为文档ID通配符来遍历父集合下的所有文档子集合,要实现你要的效果,得用集合组查询(Collection Group Query)——这是专门用来查询所有同名子集合的方法。
直接获取所有同名子集合的文档
如果你的所有目标子集合都叫flavours,不管父文档是coke还是fanta,直接用集合组查询就能一次性拿到所有风味文档:
以JavaScript Web SDK为例:
import { collectionGroup, getDocs } from "firebase/firestore"; // 传入Firestore实例和子集合名称"flavours" const flavoursQuery = collectionGroup(db, "flavours"); const querySnapshot = await getDocs(flavoursQuery); // 遍历所有结果文档 querySnapshot.forEach((doc) => { console.log(`风味文档ID:${doc.id},数据:${JSON.stringify(doc.data())}`); });
限定父集合范围(可选)
如果你的数据库里还有其他名为flavours的集合(比如根集合),想只获取soda-brands下的子集合文档,可以给每个flavours文档添加一个标识字段(比如brandParentId,值为父文档的ID),然后通过过滤条件缩小范围:
import { collectionGroup, query, where } from "firebase/firestore"; const flavoursQuery = query( collectionGroup(db, "flavours"), // 过滤出父文档是coke或fanta的风味文档 where("brandParentId", "in", ["coke", "fanta"]) ); const querySnapshot = await getDocs(flavoursQuery); // 处理结果...
注意事项
第一次运行集合组查询时,Firestore会返回错误提示,告诉你需要创建对应的索引。直接按照错误信息里的指引跳转到Firestore控制台,一键创建索引即可,索引创建完成后查询就能正常工作。
内容的提问来源于stack exchange,提问作者Sakhile Mamba
相关产品推荐
相关产品推荐

