在Firebase中维护动态计算的值

net*_*men 3 android firebase firebase-realtime-database

我有一个简单的firebase数据库:/rides是这样的简单对象的列表

{
  car: "Toyota"
  minutes: 15
}
Run Code Online (Sandbox Code Playgroud)

我需要显示所有行程的分钟数总和。显而易见的解决方案是加载所有游乐设施并计算总和。但是,如果我有数百次骑行,这将非常缓慢,可能需要几秒钟。

因此,看来我必须为此/totalMinutes在数据库中维护一个单独的字段。但是因此,/totalMinutes每次添加/删除/更改行程时,我都必须手动更新。无论如何,这不是一件大事。

但是,如果我只需要为部分游乐设施计算总分钟数呢?例如仅适用于“丰田”汽车或“福特”汽车?手动维护/totalMinutesFord/totalMinutesToyota现在似乎并不容易。

那么在Firebase中维护此类动态值的正确方法是什么?

Fra*_*len 6

Firebase无法根据数据库中的数据自动计算值。

因此,您有两个选择:

  1. 每当您更新数据时计算值
  2. 检索所有数据并在客户端上计算值

您已经(明智地)决定检索所有数据不是一个好主意。您的用户将对此表示感谢。

这样一来,只要您更新乘车数据,就可以计算派生值。我不确定为什么对多个值执行此操作比对单个值执行更困难。可能是更多的代码,但几乎是相同的代码:

var ride = { car: "Toyota", minutes: 15 };
ref = new Firebase('https://yours.firebaseio.com/');
ref.child('rides').push(ride);
ref.child('totalMinutes').transaction(function(current_value) {
  return (current_value || 0) + ride.minutes;
});
ref.child('totalMinutes'+ride.car).transaction(function(current_value) {
  return (current_value || 0) + ride.minutes;
})
Run Code Online (Sandbox Code Playgroud)