Firestore - 如何在数据库中原子地减少整数值?
Posted
技术标签:
【中文标题】Firestore - 如何在数据库中原子地减少整数值?【英文标题】:Firestore - How to decrement integer value atomically in database? 【发布时间】:2019-09-01 10:45:31 【问题描述】:Firestore 最近推出了一项新功能,可以自动递增和递减整数值。
我可以使用递增整数值
例如,
FieldValue.increment(50)
但是如何递减呢?
我尝试使用FieldValue.decrement(50)
但是FieldValue没有递减之类的方法。
它不工作。
https://firebase.googleblog.com/2019/03/increment-server-side-cloud-firestore.html?linkId=65365800&m=1
【问题讨论】:
【参考方案1】:确保您没有从 Firestore 实例访问 FieldValue。例如。 (在带有 admin sdk 的 node.js 中)
admin.firestore().FieldValue.increment(-50) // Won't work
admin.firestore.FieldValue.increment(-50) // Will work
这是为我做的。
【讨论】:
【参考方案2】:要减少字段中的值,请执行负递增。所以:
FieldValue.increment(-50)
【讨论】:
哈哈哈,我想知道为什么OP一开始就没有想到负参数!现在知道数字数据类型的有符号范围是理所当然的......无论如何,在 OP 的辩护中,我会说这个increment
方法可以更恰当地命名为 tally
! :P
FieldValue
单独不起作用。然后意识到我需要这个const FieldValue = require('firebase-admin').firestore.FieldValue;
。感谢:***.com/a/47108530/2162226
不幸的是,到达正确方法的方式在每个平台上略有不同。这确实是 Node.js 的 Admin SDK 上的语法,尽管我通常使用 admin.firestore.FieldValue.increment(-50)
。
感谢,Google 在他们的文档中没有提到这一点。
在递减时有什么办法可以避免负值?在我的情况下,字段值设置为 20,当我减少 30 时,它变为 -10,这是我不想要的。我希望值停止在 0。以上是关于Firestore - 如何在数据库中原子地减少整数值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flutter 防御性地从 Firestore 请求数据
即使文档中缺少请求的字段,如何安全地从 cloud-firestore 获取数据?
我想从Future中获取一个整数值,在flutter和firestore中打印Instance of Future'动态'函数