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

为何Firestore事务update操作未调用FirestoreDataConverter

原因说明

Firestore 客户端的 withConverter 转换器设计上仅作用于全量文档读写类操作,包括 add()、set()、get(),而 update()(包括普通文档更新和事务更新)属于部分字段补丁操作,不会触发转换器的 toFirestore 方法。

底层逻辑是:转换器的定位是对完整的实体对象做全量序列化/反序列化,而 update() 传入的是局部字段更新对象,并非完整的 Rabbit 类型实例,Firestore 不会将其视为实体对象走转换器流程,会直接校验字段值是否为 Firestore 支持的原生类型,你传入的 JS Map 属于自定义类型,不在 Firestore 原生支持的字段类型范围内,因此直接抛出类型错误。

解决方案

可以任选以下两种方式修复问题:

  • 手动序列化更新字段:调用 update 前自行把 Map 转为普通对象
    transaction.update(docRef, { map: Object.fromEntries(new Map()) });
    
  • 改用事务的 set() 方法配合合并参数,该操作会触发转换器逻辑
    // { merge: true } 表示只更新传入的字段,其余字段保留,和update行为一致
    transaction.set(docRef, { map: new Map() }, { merge: true });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:06:04