首页 > 解决方案 > 新文档的firestore更新计数器

问题描述

由于firebase(firestore)没有提供任何简单且非扩展的解决方案来计算集合中的文档,我计划创建几个计数器来跟踪文档的数量。我有以下设置:

[collection] - [document] - [subcollection]
users          userid       profile
admin          counters

我的想法是在集合“admin”中创建另一个文档“counters”,并在每次创建新的 userid 文档时更新字段“profile_created”。

我只看到一个问题。如果多人同时创建一个配置文件(创建了用户 ID),则读/写过程将不起作用,因为这几个人将获得相同的数字(读取)并且都会在这个数字上加 1。这意味着我将只有一个 +1,而不是几个 +1...

例如:profile_created = 5

5人同时报名

所有 5 人将获得(读取)当前计数器编号(profile_created = 5) 所有 5 人将 +1 到计数器

结果不会像我想要的那样是 11,我会是 6,因为不同的读取会覆盖其他读取...

这个问题有什么解决办法吗?

谢谢!!!

标签: javascriptfirebaseasynchronousgoogle-cloud-firestore

解决方案


Firestore能够可靠地增加一个值。如果你相信你的用户会增加这个数字,它可能很简单:

firebase.firestore().collection('counters').doc('profiles')
  .update({
    total: firebase.firestore.FieldValue.increment(1)
  });

否则,创建一个在每次 Firestore 更新时执行的 Cloud Function,以使用 Firebase Admin 增加该值。


推荐阅读