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

如何在cloud_firestore_odm中正确执行Cloud Firestore事务更新?

使用cloud_firestore_odm通过事务更新Firestore数据的正确方式

你的事务代码存在两个核心问题:

  1. 错误地在runTransaction回调外部执行事务更新操作,Firestore事务的所有操作必须在回调内部完成,否则无法保证原子性。
  2. 原runTransaction的回调没有执行任何实际操作,直接返回了事务对象,不符合事务的使用逻辑。

正确的实现方式如下:

await FirebaseFirestore.instance.runTransaction((transaction) async {
  // 1. 获取目标文档引用
  final userDoc = usersRef.doc('foo_id');
  
  // (可选但推荐)先读取文档,确保基于最新数据更新
  final snapshot = await transaction.get(userDoc);
  if (!snapshot.exists) {
    // 处理文档不存在的情况
    throw Exception('用户文档不存在');
  }
  
  // 2. 在事务回调内部调用transactionUpdate执行更新
  await userDoc.transactionUpdate(
    transaction,
    name: 'John',
  );
});

关键说明:

  • 所有事务相关操作(读取、更新)必须包裹在runTransaction的回调函数中,Firestore会自动处理事务的提交、重试逻辑。
  • 调用transactionUpdate时必须使用await,确保更新操作在事务上下文内完成。
  • 建议先读取文档再更新,避免基于过时数据修改,同时可以处理文档不存在的异常场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:55:13