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

Firestore事务涉及查询时的锁定机制及执行逻辑咨询

Firestore事务查询的锁定行为解析

锁定范围:仅查询返回的特定文档

Firestore事务不会锁定查询所在的整个集合或集合组,只会锁定查询返回的具体文档。以你提供的Node.js示例为例:

const db = admin.firestore();

const fireQuery = db.collectionGroup('my-collection')
                    .where('role', '==', 'user');

await db.runTransaction(async transaction => {
  // Query documents and lock them while performing the update.
  const querySnap = await transaction.get(fireQuery);

  // Perform write operations on the retrieved documents...
});

这段代码中,只有集合组my-collection里满足role == 'user'的文档会被事务锁定,集合组内其他文档或整个集合组不会受到锁定影响。

事务如何锁定查询返回的文档?

Firestore的事务机制是原子性+乐观并发控制结合的模式,不存在“提前确定锁定文档”的问题:

  • 当事务执行transaction.get(fireQuery)时,Firestore会在当前事务上下文内执行查询,获取符合条件的文档快照,同时立即对这些文档加排他锁,阻止其他事务修改它们。
  • 锁定状态会持续到事务提交成功或回滚结束。如果其他事务尝试修改被锁定的文档,会被阻塞,直到当前事务完成。
  • 如果在事务执行期间,有外部操作修改了查询结果中的文档,Firestore会自动触发事务重试:重新执行查询获取最新的文档快照,再次锁定,然后执行后续的写操作,直到事务成功完成或达到系统重试上限。

内容的提问来源于stack exchange,提问作者pcba-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:48:13