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 - 如何在数据库中原子地减少整数值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在redis中华丽丽地使用lua脚本

如何通俗地理解三个范式?

如何使用 Flutter 防御性地从 Firestore 请求数据

即使文档中缺少请求的字段,如何安全地从 cloud-firestore 获取数据?

我想从Future中获取一个整数值,在flutter和firestore中打印Instance of Future'动态'函数

SQLite:如何减少整数值的字节大小?