在firebase中维护动态计算的值

时间:2016-02-05 12:42:07

标签: android firebase firebase-realtime-database

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

{
  car: "Toyota"
  minutes: 15
}

我需要显示所有游乐设施的分钟总和。显而易见的解决方案是加载所有游乐设施并计算总和。但是,如果我有几百次骑行,这很慢,最多几秒钟。

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

但是,如果我只计算一部分游乐设施的总分钟数呢?例如,只有“丰田”汽车或“福特”汽车?现在,手动维护/totalMinutesFord/totalMinutesToyota似乎并不那么容易。

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

1 个答案:

答案 0 :(得分:5)

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

所以你的两个选择是:

  1. 每次更新数据时计算值
  2. 检索所有数据并计算客户端上的值
  3. 您已经(明智地)决定检索所有数据并不是一个好主意。您的用户将不胜感激。

    因此,每当您更新乘坐数据时,都会计算派生值。我不确定为什么为多个值执行此操作比为单个值执行操作更困难。它可能是更多的代码,但它几乎是相同的代码:

    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;
    })