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

React.js项目Firebase事务报Type does not match错误如何修复?

问题排查及修复方案

核心问题原因

  • 第一个直接触发报错的原因:Firebase Firestore 事务的 transaction.get() 方法仅支持传入单个 DocumentReference 实例,你代码中传入的 sectionRef 是 where() 方法返回的 Query 查询对象,类型不匹配直接触发了类型校验错误。
  • 第二个潜在错误:就算跳过第一步查询,transaction.delete() 方法需要接收文档引用 doc.ref,你传入的是文档快照 doc 实例,同样会触发类型错误。
  • 补充注意:Firestore 事务不支持在事务内部执行集合条件查询,所有需要操作的文档引用必须在事务启动前提前查询获取。

修正后的代码

// 第一步:事务外先执行条件查询,拿到所有匹配的文档引用
const sectionQuery = db
    .collection('items')
    .where('subSection', '==', sectionName);

sectionQuery.get().then((querySnapshot) => {
    const docRefs = querySnapshot.docs.map(doc => doc.ref);
    // 第二步:启动事务批量删除所有匹配的文档引用
    return db.runTransaction((transaction) => {
        docRefs.forEach(ref => {
            transaction.delete(ref);
        });
        return Promise.resolve();
    });
}).catch((e) => {
    console.log('操作失败', e);
});

其他可能的排查点

如果修改后仍然报错,可以检查你的项目依赖:

  • 确认项目中没有同时安装 Firebase Web V8 和 V9 两个版本的SDK,混用不同版本的SDK实例会触发跨实例类型校验错误
  • 确认你全局导入的 firebase 实例和初始化得到的 db 实例来自同一个SDK包,没有多实例初始化的冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:27:04