【问题标题】:Meteor Highcharts using collection data使用收集数据的 Meteor Highcharts
【发布时间】:2015-10-25 09:59:21
【问题描述】:

我正在尝试使用流星的 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 语句时,它要么不显示数据,要么报告显示异常,我猜这是由于 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);
  });

【问题讨论】:

    标签: mongodb meteor highcharts


    【解决方案1】:

    实际上,您可以使用cursor.map 将查找查询的结果直接转换为值数组。

    这是您的场景示例(使用 ecmascript2015)

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

    应该可以得到highchart需要的数据源格式

    【讨论】:

      【解决方案2】:

      db 结果是 objects 的集合(每行都有花括号)。而静态数据是值的数组(矩形大括号)。因此,您需要将 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 
              }]
      

      【讨论】:

      • Db 数据实际上有 6 个“字段”,其中 3 个是“列”或您可能称之为的(“0”和“1”应该命名为“国家”和“总计”,但我怀疑这与我的问题有关)。使用我的查询 SalesData.find({}, {_id:0}).fetch() 我试图只选择相关字段,但结果还包括“0”和“1”(作为列字段,我没有'没有找到排除这些的方法。
      • 如果我说的很明显,我很抱歉,但这里是有关如何从文档中获取选定列的链接。 docs.mongodb.org/manual/tutorial/…。您只需要列的名称
      • 谢谢,但这就是我在此查询中所做的:SalesData.find({}, {_id:0}).fetch() 我选择排除 _id 字段,但结果仍然包含“列”字段“0”和“1”。我浏览了 MongoDB 文档,但没有真正找到任何对我有帮助的东西。但是我已经看到了使用查找查询来填充 Highchart 数据字段的示例,因此这应该不是不可能的......
      • 如果我正确阅读了您的查询,则您只删除了 _id 字段。您需要对要隐藏的每个字段执行相同的操作。喜欢{ _id:0, fldName:0}
      • 问题是,我想保留分配给字段“0”和“1”的数据,而不是“0”和“1”本身。这个查询“find({},{_id:0, "0":0, "1":0}" 只会为数据库中的每一行返回一个空行。你明白我的意思吗?
      猜你喜欢
      • 2013-01-09
      • 2015-11-17
      • 2020-09-27
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多