如何在Firebase中获取文档内的子集合列表(React+Firebase v9场景)
如何获取Firebase文档中子集合的名称数组?
问题场景
使用React 17开发应用,已集成Firebase v9.6.6。现有openings集合,其下的文档(例如White Opening Data)包含子集合,需要将这些子集合的名称以数组形式获取并展示。
原代码问题分析
你提供的代码存在几个关键问题:
doc(docRef, 'White Opening Data')仅创建了文档引用,未实际获取文档数据- 文档引用对象没有
docs属性,因此openingSnapshot?.docs.map会直接报错 - 未调用Firebase专门用于获取子集合的异步方法
解决方案
要获取文档下的子集合名称,需使用*listCollections*方法,该方法会返回文档下所有子集合的引用,再从中提取名称即可。
修正后的代码
import { collection, doc, getDoc, listCollections } from "firebase/firestore"; export const getCollectionsList = async () => { // 直接创建openings集合下目标文档的引用 const docRef = doc(db, 'openings', 'White Opening Data'); try { // 先获取文档快照,验证文档是否存在 const docSnapshot = await getDoc(docRef); if (!docSnapshot.exists()) { console.log("指定文档不存在"); return []; } // 获取该文档下的所有子集合引用 const collections = await listCollections(docRef); // 提取子集合名称组成数组 const collectionNames = collections.map(col => col.id); console.log('子集合名称数组: ', collectionNames); return collectionNames; } catch (error) { console.error('获取子集合失败: ', error); return []; } };
代码说明
- 使用
doc(db, 'openings', 'White Opening Data')直接生成目标文档的引用,简化代码层级 - 通过
getDoc验证文档存在性,避免后续操作因文档不存在报错 listCollections是异步方法,需用await获取结果,返回子集合引用的数组- 遍历子集合引用,通过
col.id提取子集合名称,最终得到所需的名称数组
内容的提问来源于stack exchange,提问作者Vrushik
相关产品推荐
相关产品推荐

