如何获取Firebase Firestore中子集合文档所属的根文档
结论
你无法直接从product的快照中提取到所属餐厅的完整数据,需要额外发起一次查询请求,不过Firestore已经内置了父级路径的快速获取方式,不需要你手动拼接文档路径。
具体实现方法
每个QueryDocumentSnapshot都自带reference属性,存储了该文档的完整路径信息,你可以通过多层parent属性向上回溯父级节点:
product.reference指向当前product文档本身product.reference.parent指向product所属的products子集合product.reference.parent.parent就是该product所属的餐厅文档引用
拿到餐厅文档引用后直接调用get()方法即可获取数据,对应代码示例:
QuerySnapshot snapshot = await FirebaseFirestore.instance .collectionGroup('products').get(); QueryDocumentSnapshot product = snapshot.docs.elementAt(0); // 获取所属餐厅的文档引用 DocumentReference restaurantRef = product.reference.parent.parent!; // 发起请求获取餐厅数据 DocumentSnapshot restaurantSnapshot = await restaurantRef.get(); // 读取餐厅的字段值 var restaurantName = restaurantSnapshot.get('name'); var restaurantAddress = restaurantSnapshot.get('address');
可选优化方案
如果你频繁需要在查询product后获取所属餐厅的基础信息,可以在创建product文档时冗余存储餐厅的常用字段(比如餐厅ID、名称、评分),这样查询到product后直接读取本身的冗余字段即可,不需要额外发起请求,适合读多写少的业务场景,能降低请求次数、提升加载速度。
内容的提问来源于stack exchange,提问作者Kyuberi
相关产品推荐
相关产品推荐

