Firestore获取子集合数据报错:文档引用段数异常
问题解决与原因说明
为什么getDoc不允许三段路径的引用?
Firestore的层级结构是严格的集合→文档→集合→文档交替模式,单个文档的引用必须对应偶数个路径段(比如users/userUID2是2段,属于文档;users/userUID2/images/img001是4段,也属于文档)。而users/userUID2/images是3段,最后一级是集合而非单个文档,getDoc是专门用来获取单个文档的方法,自然不能作用在集合引用上,这就是报错的核心原因。
正确获取images子集合所有数据的代码
要获取子集合的全部数据,你需要用collection()创建集合引用,再搭配getDocs()(复数形式,用于查询集合下所有文档),修正后的代码如下:
async function ListImageData() { // 创建images子集合的引用,注意不要加多余的尾部斜杠 const imagesCollectionRef = collection(db, "users", "userUID2", "images"); // 获取集合下所有文档的快照 const querySnapshot = await getDocs(imagesCollectionRef); // 遍历并输出所有文档的数据 querySnapshot.forEach((doc) => { console.log(`${doc.id} 的数据:`, doc.data()); }); }
关于collection方法的错误排查
你之前用collection出现的Expected type 'Xc', but it was: a custom ta object错误,大概率是以下原因导致:
- 路径参数带了多余的尾部斜杠(比如写成
"users/"),Firestore的路径参数不需要加斜杠,直接传纯名称即可 - 误将
collection方法写成doc方法,或者初始化的db实例存在问题(确认db是正确配置的Firestore实例)
内容的提问来源于stack exchange,提问作者HelloToxicity
相关产品推荐
相关产品推荐

