如何按创建日期对对象进行排序以使用 Meteor 插入高级图表

How to sort objects by creation date to plug into high charts with Meteor

我并没有经常使用仪表板,现在正在为我使用 Meteor 构建的 contest/giveaway 应用程序创建一个仪表板。我正在使用 highcharts 并试图弄清楚如何准确地构建我的数据,以便实时更新图表。这是我的 ContestAnalytics.js 文件:

var category_arr = [moment().subtract(5, 'days').format('MMM D'), moment().subtract(4, 'days').format('MMM D'), moment().subtract(3, 'days').format('MMM D'), moment().subtract(2, 'days').format('MMM D'), moment().subtract(1, 'days').format('MMM D'), moment().format('MMM DD'), moment().add(1, 'days').format('MMM D'), moment().add(2, 'days').format('MMM D'), moment().add(3, 'days').format('MMM D'), moment().add(4, 'days').format('MMM D')  ];



function builtArea() {


  $('#container-area').highcharts({

    title: {
        text: 'Entries',
        x: -20 //center
    },

    xAxis: {
        categories: category_arr
    },
    yAxis: {
        title: {
            text: 'Entries'
        },
        plotLines: [{
            value: 0,
            width: 1,
            color: '#808080'
        }]
    },
    tooltip: {
        valueSuffix: ''
    },
    legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'middle',
        borderWidth: 0
    },
    series: [{
        name: 'Entries',
        data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3]
    }]
  });
}

Template.ContestAnalytics.rendered = function () {
   var currentContestId = this._id;
   var entriesCursor = Entries.find({contest_id: currentContestId});
   var entries = [0,0,0,0,0,0,0,0,0,0];

   entriesCursor.forEach(function(entry) {
      var m = moment(entry.submitted).format('MMM D');

      for (var i = 0; i < 10; i++) {
         if (category_arr[i] === m) {
              entries[i] += 1;
         }
      }
   });

   builtArea(entries);
};

如您所见,我使用 Moment.js 在 x 轴上显示 10 天的跨度。我暂时在系列数据中有硬编码值,但我试图弄清楚如何使系列数据动态化。

我有一个条目集合,其中包含 contest_id 和已提交的属性。提交的属性在创建时使用 new Date() 填充。我希望做的是将一个数组插入到具有 10 个值的系列数据中。每个值都是在特定日期创建的条目数的计数。如果您能就如何完成此任务提供任何建议,我将不胜感激。

你可以在这里找到我的仓库:https://github.com/ryanswapp/rymotion

编辑

我只是试图让它与渲染块中的​​代码一起工作,但没有成功。有什么想法吗?

您可以尝试使用...

var firstSeries = Entries.find({submitted: category_arr[0]});

然后将该变量放入您的系列中...

data: [firstSeries]

当然,如果您走这条路,您将需要设置发布和订阅,以便您的模板可以访问 Entries 集合。

我明白了。为了获取当前模板实例的 ID,我必须使用 Blaze.currentView._templateInstance.data._id 然后我可以访问属于特定比赛的特定日期的所有条目。

Template.ContestAnalytics.rendered = function () {

  var currentContestId = Blaze.currentView._templateInstance.data._id;
  Tracker.autorun(function() {

      var entries = [];
      for (var i = 0; i < 10; i++) {
          var tempNum = Entries.find({contest_id: currentContestId, submitted_day: category_arr[i] }).count();
          entries.push(tempNum);
      }
      builtArea(entries);

  });



};