Firebase V9调用setDoc遇类型错误:期望Xc类型却得到自定义Zc对象
解决Firebase V9嵌套集合存储时的类型错误
你遇到的Uncaught (in promise) FirebaseError: Expected type 'Xc', but it was: a custom Zc object错误,核心原因是用错了Firebase的API方法:
collectionGroup()是用于跨多个同名子集合查询的工具,不能用来定位要写入的具体文档setDoc()的第一个参数必须是文档引用(DocumentReference),你传入的集合组对象类型不匹配,导致报错
修正后的代码
const handleSubmit = async (event) => { event.preventDefault(); let x = Math.floor((Math.random() * 100000000) + 1); const data = { timestamp: Timestamp.now().seconds, uid: `${currentUser.uid}+${x}`, email: currentUser.email, fromDate: fromDate, toDate: toDate, city: city, para: para, totalexpense: TotalExpense, itinerary: itinerary } console.log(data) // 正确构建嵌套集合的文档引用 const targetDocRef = doc( db, "experiences", currentUser.email, // 父集合下的文档ID currentUser.email, // 子集合名称 `${currentUser.uid}+${x}` // 要写入的文档ID(可自定义或省略让Firebase自动生成) ); await setDoc(targetDocRef, {...data}); }
额外说明
- 如果你不需要自定义文档ID,可简化文档引用的创建:
// 自动生成随机文档ID const targetDocRef = doc(collection(db, "experiences", currentUser.email, currentUser.email)); - 确认你的集合层级符合预期:根集合
experiences→ 文档currentUser.email→ 子集合currentUser.email→ 新文档,若层级规划有误,调整doc()的路径参数即可。
内容的提问来源于stack exchange,提问作者HIMANSHU KUMAR AMB
相关产品推荐
相关产品推荐

