【发布时间】:2015-11-22 04:28:14
【问题描述】:
我需要使用 Meteor.js 使用集合中的多个值计算平均值。
特别是,我需要做两件事:
- 最后一个和第一个的区别obj.km
- 所有obj.liters的总和
使用 javascript 我会写这样的东西:
var arr = [{
'km': 12000,
'liters': 20
}, {
'km': 12140,
'liters': 50
}, {
'km': 12240,
'liters': 45
}];
function calculate_avg() {
var sum_liters = 0,
arrlength = arr.length;
for(i = 0; i < arrlength; i++) {
sum_liters += arr[i].liters;
}
return ((arr[arrlength-1].km - arr[0].km)/sum_liters);
};
在流星中,我定义了一个名为“Refills”的集合:
Refills = new Meteor.collection('refills');
// and I insert some example data like in the javascript array
Refills.insert({
'km': 12000,
'liters': 20
});
Refills.insert({
'km': 12500,
'liters': 15
});
Refills.insert({
'km': 13000,
'liters': 35
});
//etc.
最好的方法是什么?
我试图做这样的事情:
Template.refills.helpers({
avg: function(){
var sum_liters = 0,
diff_km = 0;
Refills.find().map(function (doc, index, cursor) {
//?? var diff_km = doc[last].km - doc[0].km
var sum_liters += doc.liters;
return ((/*diff_km*/)/sum_liters);
});
}
});
提前感谢任何愿意提供帮助的人。
【问题讨论】:
-
执行
.find().fetch()将返回一个数组而不是游标。然后,您可以像以前一样在 javascript 中运行您的计算。如果您的收藏很大,那么您可能需要使用mongodb aggregations
标签: javascript mongodb meteor collections