You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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});
}

额外说明

  1. 如果你不需要自定义文档ID,可简化文档引用的创建:
    // 自动生成随机文档ID
    const targetDocRef = doc(collection(db, "experiences", currentUser.email, currentUser.email));
    
  2. 确认你的集合层级符合预期:根集合experiences → 文档currentUser.email → 子集合currentUser.email → 新文档,若层级规划有误,调整doc()的路径参数即可。

内容的提问来源于stack exchange,提问作者HIMANSHU KUMAR AMB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:25:21