【问题标题】:Average function with collection using Meteor.js使用 Meteor.js 收集的平均函数
【发布时间】:2015-11-22 04:28:14
【问题描述】:

我需要使用 Meteor.js 使用集合中的多个值计算平均值。

特别是,我需要做两件事:

  1. 最后一个和第一个的区别obj.km
  2. 所有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


【解决方案1】:

试试这个:

Template.refills.helpers({
  avg: function() {
    // sort refills by km so the math in the last step makes sense
    var refills = Refills.find({}, {sort: {km: 1}}).fetch();
    // use a simple reduce to compute the sum
    var totalLiters = _.reduce(refills, (function(s, r) {return s + r.liters;}), 0);
    // return the average (total distance) / (total liters)
    return (_.last(refills).km - _.first(refills).km) / totalLiters;
  }
});

您需要在光标上使用fetch,以便操作数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2023-03-19
    • 2021-12-22
    相关资源
    最近更新 更多