Javascript 使用GCF/pubsub更新Firestore文档中的计数器

Javascript 使用GCF/pubsub更新Firestore文档中的计数器,javascript,firebase,google-cloud-firestore,google-cloud-functions,google-cloud-pubsub,Javascript,Firebase,Google Cloud Firestore,Google Cloud Functions,Google Cloud Pubsub,我的客户机在PubSub上发布消息,GCF会触发收到的每条消息,从而编辑firestore中的文档。该文档具有id、房间名称以及当前房间内的人数。GCF增加了当前的数量 但我认为,如果同一个房间同时有两条消息,gcf将无法完成正确的工作,我的文档上也不会有最后的+2 基本上,GCF获取文档,并增加当前数量 如何处理同一房间内同时到达的多条消息?使用可以确保字段正确递增。正如Firebase博客中所解释的,“使用FieldValue.increment(),数据库将根据其拥有的任何值立即进行更改”

我的客户机在PubSub上发布消息,GCF会触发收到的每条消息,从而编辑firestore中的文档。该文档具有id、房间名称以及当前房间内的人数。GCF增加了当前的数量

但我认为,如果同一个房间同时有两条消息,gcf将无法完成正确的工作,我的文档上也不会有最后的+2

基本上,GCF获取文档,并增加当前数量

如何处理同一房间内同时到达的多条消息?

使用可以确保字段正确递增。正如Firebase博客中所解释的,“使用
FieldValue.increment()
,数据库将根据其拥有的任何值立即进行更改”

在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;
});

“同一时间”并不清楚。您需要一个时间窗口,在该时间窗口中要消除同一消息的重复数据。这是你需要的吗?谢谢你的回答。不太可能,我承认两个客户会进入同一个房间,并“同时”点击按钮。两条消息到达PubSub并触发两条GCF。他们得到相同的文档,并在此文档中添加+1。我的文档中只有+1,但我应该有+2;不是+1,所以不是重复数据消除。理解。您是否尝试过与Firestore进行交易?不管怎样,你每秒有多少条信息?谢谢,这正是我要找的。它能处理最大值吗?“它能处理最大值吗”你的确切意思是什么?嘿@kmalki如果它能回答你的问题,请接受我的答案。参见@RenaudTarnec,这仍然受到1次写入/秒限制,对吗?我的意思是,在使用增量时,我们还需要确保文档每秒更新不超过一次,对吗?