如何获取Firestore指定文档下的所有子集合及其ID
你当前使用的onSnapshot方法仅用于监听messages/{userUid}文档本身的数据变更,无法获取该文档下挂载的子集合列表,要拿到所有子集合的ID,需调用文档引用的listCollections方法,实现代码如下:
一次性获取所有子集合ID
export const getAllMessagesByUserId = async (userUid) => { const userDocRef = firebase .firestore() .collection('messages') .doc(userUid); // 获取文档下所有子集合引用 const collectionRefs = await userDocRef.listCollections(); // 提取所有子集合ID const collectionIds = collectionRefs.map(ref => ref.id); console.log('所有子集合ID:', collectionIds); return collectionIds; };
注意事项
- 需确保Firestore安全规则中开放了对应文档的
list权限,否则调用会触发权限报错 - Firestore目前不支持直接监听子集合列表的实时变更,如有实时监听需求,可在
messages/{userUid}文档中新增一个字段专门维护子集合ID列表,每次新增/删除子集合时同步更新该字段,后续监听文档快照即可实时拿到最新的子集合ID列表
内容的提问来源于stack exchange,提问作者Dominik Grabiec
相关产品推荐
相关产品推荐

