Meteor Highcharts使用收集数据

时间:2015-10-24 13:59:45

标签: mongodb meteor highcharts

我正在尝试使用Meteor的Highchart软件包显示一个饼图。 我已经使用静态数据源,如下所示:

series: [{
            type: 'pie',
            name: 'Sales',
            data: 
              [  
                 ["Norway", 123123.32],
                 ["Canada", 1977844.86],
                 ["France", 2644017.71],
                 ["Denmark", 28954612.34],
                 ["United Kingdom", 3391712.21],
                 ["United States", 9389789.51]
              ]
        }]

在模板文件的.js的系列部分中。

但是当我尝试使用MongoDb的find语句时,它显示没有数据或报告显示奇怪,我想这是由于查找查询产生的数据格式化。

我在集合中的数据看起来像这样:

{ "_id" : "HsgEBrrSvBp6qzp8Q", "0" : "Norway", "1" : 9061000.58 }
{ "_id" : "5dvtddEogj6d5Zw7D", "0" : "Canada", "1" : 1977844.86 }
{ "_id" : "6XmfgjBG4dupes3ma", "0" : "France", "1" : 2644017.71 }
{ "_id" : "BB8Av8GRpPXPsWfzj", "0" : "Denmark", "1" : 2894312.34 }
{ "_id" : "44qbHdtA3wTtf9QFL", "0" : "United Kingdom", "1" : 3391712.21 }
{ "_id" : "YqyWGzXkT4pD532qJ", "0" : "United States", "1" : 9389789.51 }

我也尝试过只找到所选字段(“0”和“1”)

SalesData.find({}, {_id:0}).fetch()

任何人都有关于如何以可在Highcharts中使用的格式从集合中获取数据的任何提示?!

谢谢!

编辑:我通过将所需的值推送到数组并将该数组设置为数据源来解决它。

var seriesData = [];
  var reportData = SalesData.find({});

  reportData.forEach(function(countryData) {
    var dataPoint = [countryData.Country, countryData.Total];
    seriesData.push(dataPoint);
    console.log(countryData.Country);
  });

2 个答案:

答案 0 :(得分:4)

实际上,您可以使用光标将查找查询的结果直接转换为值数组。地图





以下是您的方案示例(使用ecmascript2015)




  SalesData.find({},{fields:{Country:1,Total:1}})。fetch()。map((countryData)=>
 {
 {return [countryData.Country, countryData.Total]}
})
  




您应该能够获得highchart所需的数据源格式




答案 1 :(得分:1)

db result是对象的集合(每行上的花括号)。静态数据是数组值(矩形大括号)。因此,您需要将db中的每一行转换为值数组。

这是映射代码:

var ds = [
    { "_id" : "HsgEBrrSvBp6qzp8Q", "0" : "Norway", "1" : 9061000.58 },
    { "_id" : "5dvtddEogj6d5Zw7D", "0" : "Canada", "1" : 1977844.86 },
    { "_id" : "6XmfgjBG4dupes3ma", "0" : "France", "1" : 2644017.71 },
    { "_id" : "BB8Av8GRpPXPsWfzj", "0" : "Denmark", "1" : 2894312.34 },
    { "_id" : "44qbHdtA3wTtf9QFL", "0" : "United Kingdom", "1" : 3391712.21 },
    { "_id" : "YqyWGzXkT4pD532qJ", "0" : "United States", "1" : 9389789.51 }
];

var asValueArray = ds.map(function(row){
    return [row["0"],row["1"]];
});

然后,您只需将其分配给您的系列对象:

series: [{
        type: 'pie',
        name: 'Sales',
        data: asValueArray 
        }]