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

Firebase更新competitions子集合字段报gc类型错误的解决方法

报错现象

更新competitions集合下指定文档嵌套的scorecard子集合字段时,触发如下错误:

FirebaseError: Expected type 'gc', but it was: a custom yc object

错误原因
  • updateDoc 接口要求第一个入参必须是单个文档的DocumentReference类型对象,原代码传入的是query()生成的集合查询对象(Query类型),参数类型不匹配直接触发报错。
  • 原代码传入的{ merge: true }配置是无效参数:updateDoc本身的逻辑就是仅更新传入的指定字段,不会覆盖全量文档,merge是setDoc接口的专属配置项,不需要传给updateDoc。
正确实现代码

你需要先执行查询拿到匹配scorecardid的目标文档引用,再调用更新接口,参考实现:

// 引入需要的方法:import { query, collection, where, getDocs, updateDoc, doc } from "firebase/firestore"
// 构建scorecard子集合查询条件
const scorecardQuery = query(
  collection(db, 'competitions', id, 'scorecard'),
  where("id", "==", scorecardid)
);
// 执行查询拿到结果集
const querySnapshot = await getDocs(scorecardQuery);
// 遍历匹配到的文档执行更新(若id唯一则只会命中1条文档)
querySnapshot.forEach(async (docSnapshot) => {
  await updateDoc(docSnapshot.ref, { finalscore: 300 });
});

如果你的scorecard子集合内的文档ID本身就和scorecardid值一致,可以跳过查询步骤直接构建文档引用更新,性能更好:

// 直接拼接目标文档路径生成引用,无需额外查询
const targetDocRef = doc(db, 'competitions', id, 'scorecard', scorecardid);
await updateDoc(targetDocRef, { finalscore: 300 });
数据库结构参考

DB structure
DB structure 2

内容的提问来源于stack exchange,提问作者Pieter Venter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:42:16