javascript - 使用 GCF/pubsub 更新 Firestore 文档中的计数器
问题描述
我有在 PubSub 上发布消息的客户,并且 GCF 触发接收到的每条消息,它在我的 firestore 中编辑文档。该文档包含一个 id、一个房间的名称以及该房间内的当前人数。GCF 增加当前数量。
但我认为,如果同一房间同时有两条消息,gcf 将无法完成正确的工作,我的文档不会有最后的 +2 吗?
基本上,GCF 获取文档,并增加当前数量。
我该如何处理同时到达同一个房间的多条消息?
解决方案
通过使用FieldValue.increment()
,您可以确保该字段将正确递增。正如这篇 Firebase 博客文章中所解释的,“有了FieldValue.increment()
,数据库将立即根据它所具有的任何值进行更改”。
在 Cloud Function for Firebase 中,执行以下操作:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const FieldValue = require('firebase-admin').firestore.FieldValue;
exports.scheduledFunction = functions.pubsub.schedule('...').onRun(async (context) => {
// ...
await admin.firestore().collection("...").doc("...").update({ nbrOfPeople: FieldValue.increment(1) });
// ...
return null;
});
推荐阅读
- mysql - 对具有相同键的记录执行条件操作
- reactjs - 谷歌域上 netlify 的 DNS 设置是什么?
- flutter - 构造函数外部的实例字段访问
- vba - 列出 Access 表单上所有控件的 FormatConditions
- c# - 将编译时创建的资源链接到类库
- bison - 如何在yacc中区分大于小于'<''>'和通用'<>'
- python-3.x - 我将如何制作一个 3 位数的密码生成器?
- powershell - 在 Powershell 中快速获取服务器 Ping 结果
- csv - 一个 Cypher 查询中的多个 LOAD CSV 语句
- java - 如何获取用户输入的大小并从方法中填充数组