在 firebase 中维护动态计算的值
Maintaining dynamically computed values in firebase
我有一个简单的 firebase 数据库:/rides
是一个像这样的简单对象的列表
{
car: "Toyota"
minutes: 15
}
我需要显示所有游乐设施的总分钟数。显而易见的解决方案是加载所有游乐设施并计算总和。但是如果我有几百次骑行,这会很慢,最多几秒钟。
所以看来我必须为此在数据库中维护一个单独的字段 /totalMinutes
。但是因此每次 add/remove/change 骑行时我都必须手动更新 /totalMinutes
。不管怎样,这不是什么大不了的工作。
但是,如果我只需要计算部分行程的总分钟数怎么办?例如仅用于 "Toyota" 辆汽车或 "Ford" 辆汽车?手动维护/totalMinutesFord
、/totalMinutesToyota
现在好像没那么容易了。
那么在 firebase 中维护此类动态值的正确方法是什么?
Firebase 无法根据您数据库中的数据自动计算值。
所以你的两个选择是:
- 每次更新数据时计算值
- 检索所有数据并在客户端计算值
您已经(明智地)决定检索所有数据不是一个好主意。您的用户将对此表示感谢。
因此,只要您更新行程数据,就可以计算派生值。我不确定为什么对多个值执行此操作比对单个值执行此操作更困难。代码可能更多,但代码几乎相同:
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;
})
我有一个简单的 firebase 数据库:/rides
是一个像这样的简单对象的列表
{
car: "Toyota"
minutes: 15
}
我需要显示所有游乐设施的总分钟数。显而易见的解决方案是加载所有游乐设施并计算总和。但是如果我有几百次骑行,这会很慢,最多几秒钟。
所以看来我必须为此在数据库中维护一个单独的字段 /totalMinutes
。但是因此每次 add/remove/change 骑行时我都必须手动更新 /totalMinutes
。不管怎样,这不是什么大不了的工作。
但是,如果我只需要计算部分行程的总分钟数怎么办?例如仅用于 "Toyota" 辆汽车或 "Ford" 辆汽车?手动维护/totalMinutesFord
、/totalMinutesToyota
现在好像没那么容易了。
那么在 firebase 中维护此类动态值的正确方法是什么?
Firebase 无法根据您数据库中的数据自动计算值。
所以你的两个选择是:
- 每次更新数据时计算值
- 检索所有数据并在客户端计算值
您已经(明智地)决定检索所有数据不是一个好主意。您的用户将对此表示感谢。
因此,只要您更新行程数据,就可以计算派生值。我不确定为什么对多个值执行此操作比对单个值执行此操作更困难。代码可能更多,但代码几乎相同:
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;
})