javascript - 新文档的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,因为不同的读取会覆盖其他读取...
这个问题有什么解决办法吗?
谢谢!!!
解决方案
Firestore能够可靠地增加一个值。如果你相信你的用户会增加这个数字,它可能很简单:
firebase.firestore().collection('counters').doc('profiles')
.update({
total: firebase.firestore.FieldValue.increment(1)
});
否则,创建一个在每次 Firestore 更新时执行的 Cloud Function,以使用 Firebase Admin 增加该值。
推荐阅读
- laravel - Laravel 7:自定义保护身份验证无法按预期工作
- eclipse-che - 不能使用 chectl auth:login 或 server:shutdown
- python - 从 s3 读取一个 csv 文件,不包括一些值
- apache-camel - 基于表达式处理的事务性 Camel 路由标记交换不起作用
- .net - 升级到 .NET 5 后生成服务器上的 MSB3644
- python - 修补时如何引用本地导入-正确的python测试结构
- firebase - Firebase:通过存储在正文中的 ID 更新文档
- amazon-web-services - Terraform 计划在导入 aws 资源后显示差异
- powershell - Windows Sandbox PowerShell 登录命令窗口不可见
- unity3d - 聚光灯不适用于统一 Urp 中的虚拟现实