即使使用FieldValue.increment

时间:2019-05-05 18:29:57

标签: firebase firebase-authentication google-cloud-firestore google-cloud-functions

我的用例是,我想继续汇总数据库中的Firebase用户数,以便快速轻松地进行访问。为此,我有一个监听user.onCreate的云函数,它只是使用原子FieldValue.increment来递增文档中的字段。

代码如下:

exports.createProfile = functions.auth.user().onCreate(async user => {
 return Promise.all([
    addProfileToDatabase(),
    function() {
     db.collection('someCollection').doc(docId).update({
      count: admin.firestore.FieldValue.increment(1)
     )}
    }
  ])
})

问题:数据库中的计数超过了Firebase 身份验证标签中显示的已身份验证的用户数。我会定期将其重置为正确的数字,然后慢慢增加。

我已经阅读了有关在文件上进行写限制的信息,但这反而会减少计数。但是,为什么数据库中的计数总是超过实际计数?

1 个答案:

答案 0 :(得分:0)

在没有看到您的代码的情况下,我唯一可以想象的是您的函数不是幂等的。每个触发事件可能多次调用函数。这就是为什么您的人数超出预期的原因。

documentationthis video中了解有关Cloud Functions幂等性的更多信息。