You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MongoDB数据接入AngularJS的highchart-ng图表

嘿,我来帮你搞定把MEAN栈数据库的数据接入AngularJS Highcharts的问题!你现在已经能用静态数据渲染出图表了,接下来只需要把静态数据替换成从数据库获取的动态数据就行,分这几步来:

从MEAN栈数据库获取数据并接入Highcharts

1. 先写后端API:从MongoDB取任务统计数据

首先在你的Express后端写一个接口,用来查询任务的名称和对应的总耗时(用Mongoose的聚合查询来分组计算):

// 假设你已经定义了Task模型,包含name(任务名)和duration(单条耗时)字段
router.get('/api/task-stats', async (req, res) => {
  try {
    // 按任务名分组,计算每个任务的总耗时
    const taskStats = await Task.aggregate([
      {
        $group: {
          _id: '$name', // 按任务名称分组
          totalDuration: { $sum: '$duration' } // 累加该任务的所有耗时
        }
      },
      { $sort: { _id: 1 } } // 可选:按任务名称排序,让图表更规整
    ]);
    res.json(taskStats);
  } catch (err) {
    res.status(500).json({ message: '获取数据失败:' + err.message });
  }
});

2. AngularJS控制器:调用API并更新图表

在你的AngularJS控制器里,用$http服务调用上面的API,把返回的数据转换成Highcharts需要的格式,再更新图表配置:

angular.module('你的项目模块名').controller('TaskChartCtrl', ['$scope', '$http', function($scope, $http) {
  // 先初始化图表配置(数据留空,后续动态填充)
  $scope.chartConfig = {
    chart: { type: 'column' },
    title: { text: 'Task Duration' },
    xAxis: { categories: [], crosshair: true },
    yAxis: { min: 0, title: { text: 'Task Duration (Hrs)' } },
    tooltip: {
      headerFormat: '<span style="font-size:10px">{point.key}</span> <table>',
      pointFormat: '<tr><td style="color:{series.color};padding:0"> {series.name}: </td>' +
                   '<td style="padding:0"><b>{point.y:.1f} Hrs</b></td></tr>',
      footerFormat: '</table> ',
      shared: true,
      useHTML: true
    },
    plotOptions: { column: { pointPadding: 0.2, borderWidth: 0 } },
    series: [{ name: 'Tasks', data: [] }]
  };

  // 调用后端API获取数据
  $http.get('/api/task-stats')
    .then(function(response) {
      const taskData = response.data;
      // 把返回的数据拆分出任务名数组和总耗时数组
      const taskNames = taskData.map(item => item._id);
      const totalDurations = taskData.map(item => item.totalDuration);

      // 更新图表的数据源
      $scope.chartConfig.xAxis.categories = taskNames;
      $scope.chartConfig.series[0].data = totalDurations;
    })
    .catch(function(error) {
      console.error('加载任务数据出错:', error);
      // 这里可以加个用户提示,比如$scope.errorMsg = '数据加载失败,请重试';
    });
}]);

3. 几个需要注意的细节

  • 确保后端API的路径和前端$http.get的路径完全一致,比如后端是/api/task-stats,前端就不能写错
  • 如果你的Task模型字段名和示例不一样(比如任务名是taskTitle而不是name),记得修改聚合查询里的字段名
  • 我把你原来tooltip里的mm改成了Hrs,更符合“耗时”的场景,你可以根据实际需求调整
  • 记得给AngularJS模块注入ng的核心服务,比如$http要在控制器依赖里声明

这样调整后,页面加载时就会自动从数据库拉取最新的任务耗时数据,渲染出你想要的动态图表啦!


内容的提问来源于stack exchange,提问作者sayali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:05:22