Firebase Firestore如何单操作实现不存在则创建文档并递增count字段
Firestore 单方法实现字段递增+自动创建文档的方案
核心结论
你提到的写法仅需要补充merge=True参数即可直接使用,完全可以替代你当前先查询再分支操作的实现,且是原子操作,并发安全性更高。
具体说明
Increment是Firestore提供的原子操作符,本身支持在set()方法中使用,搭配merge=True参数后的行为完全匹配你的需求:- 当目标文档不存在时:自动创建文档,
count字段初始值为1,和你当前else分支的set({"count": 1})效果一致 - 当目标文档已存在时:对
count字段执行原子递增1操作,和你当前if分支的update()效果一致
- 当目标文档不存在时:自动创建文档,
- 你当前的先调用
get()判断文档存在性的写法存在并发风险:如果多个请求同时查询到文档不存在,会同时执行初始化赋值,最终导致计数结果不符合预期,单语句的set()+Increment方案不存在该问题。
最终实现代码
my_ref = db.collection(u'my_col').document(f"my_doc_key") my_ref.set({"count": firestore.Increment(1)}, merge=True)
注意事项
不要遗漏
merge=True参数,否则当目标文档已存在且包含其他字段时,set()会直接覆盖整个文档,仅保留count字段,造成其他字段数据丢失。
内容的提问来源于stack exchange,提问作者Aleka
相关产品推荐
相关产品推荐

