首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >增加Firebase中所有内容的值的最有效方法

增加Firebase中所有内容的值的最有效方法
EN

Stack Overflow用户
提问于 2015-12-25 07:55:04
回答 2查看 11.3K关注 0票数 7

假设我有如下所示的条目:

我想为预估列表中的每一项将priority字段递增1。

我可以像这样获取估计值:

代码语言:javascript
运行
复制
var estimates = firebase.child('Estimates');

在此之后,我如何自动将每个预估优先级递增1?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-26 06:15:09

这是循环所有项目并提高其优先级的一种方法:

代码语言:javascript
运行
复制
var estimatesRef = firebase.child('Estimates');
estimatesRef.once('value', function(estimatesSnapshot) {
  estimatesSnapshot.forEach(function(estimateSnapshot) {
    estimateSnapshot.ref().update({
      estimateSnapshot.val().priority + 1
    });
  });
});

它循环遍历Estimates的所有子级,并增加每个子级的优先级。

您还可以将这些调用合并为单个update()调用:

代码语言:javascript
运行
复制
var estimatesRef = firebase.child('Estimates');
estimatesRef.once('value', function(estimatesSnapshot) {
  var updates = {};
  estimatesSnapshot.forEach(function(estimateSnapshot) {
    updates[estimateSnapshot.key+'/priority'] = estimateSnapshot.val().priority + 1;
  });
  estimatesRef.update(updates);
});

性能将类似于第一个解决方案(Firebase在处理多个请求时非常高效)。但在第二种情况下,它将被发送一个命令到服务器,因此它要么失败,要么完全成功。

票数 6
EN

Stack Overflow用户

发布于 2019-04-06 18:36:12

仅适用于FIRESTORE API的,不适用于FIREBASE

多亏了最新的Firestore补丁(2019年3月13日),你不需要遵循上面的其他答案。

firestore的FieldValue类现在托管一个增量方法,该方法自动更新firestore数据库中的数字文档字段。可以将此FieldValue标记与DocumentReference对象的set ( mergeOptions为true)或update方法一起使用。

使用方法如下(来自官方docs,这就是全部):

代码语言:javascript
运行
复制
DocumentReference washingtonRef = db.collection("cities").document("DC");

// Atomically increment the population of the city by 50.
washingtonRef.update("population", FieldValue.increment(50));

如果你想知道,它可以从firestore的18.2.0版本中获得。为方便起见,Gradle依赖项配置为implementation 'com.google.firebase:firebase-firestore:18.2.0'

注意:增量操作对于实现计数器很有用,但请记住,每秒只能更新单个文档一次。如果您需要更新超过此速率的计数器,请参阅Distributed counters页面。

EDIT 1FieldValue.increment()纯粹是“服务器”端(发生在firestore中),因此您不需要向客户端公开当前值。

EDIT 2:在使用管理API时,您可以使用admin.firestore.FieldValue.increment(1)实现相同的功能。感谢@Jabir Ishaq自愿让我了解这个未记录的功能。:)

EDIT 3:如果要增减的目标字段不是数字或不存在,increment方法将取值为当前值!这在您第一次创建文档时很有帮助。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34458930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档