我正在尝试使用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);
});
答案 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
}]