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

如何让MongoDB查询结果适配Grafana二维折线图数据格式?

解决MongoDB数组转Grafana XY图格式的两种方法

方法一:调整MongoDB聚合查询(推荐,保证顺序)

如果你的MongoDB文档结构类似:

{
  "xArr": [1.2, 2.3, 3.4],
  "yArr": [5.6, 7.8, 9.0]
}

用以下聚合查询将两个数组按索引配对,输出Grafana可直接识别的键值对格式:

db.collection.aggregate([
  // 展开x数组,同时保留元素的原始索引
  {
    $unwind: {
      path: "$xArr",
      includeArrayIndex: "idx"
    }
  },
  // 根据索引取出y数组中对应的元素
  {
    $addFields: {
      "y": { $arrayElemAt: ["$yArr", "$idx"] }
    }
  },
  // 只保留需要的x、y字段,清理冗余数据
  {
    $project: {
      _id: 0,
      x: "$xArr",
      y: "$y"
    }
  }
])

查询会输出如下结构的文档,每个文档对应一个XY坐标点,完全适配Grafana XY图要求:

{ "x": 1.2, "y": 5.6 },
{ "x": 2.3, "y": 7.8 },
{ "x": 3.4, "y": 9.0 }

注:includeArrayIndex会严格保留数组的原始顺序,不会出现乱序问题

方法二:用Grafana转换功能处理现有查询结果

如果不想修改MongoDB查询,可通过Grafana多步转换处理原始数组数据:

  • 第一步:Extract fields转换
    选择数据源返回的字段,将x数组和y数组分别提取为独立字段(比如命名为x_arr和y_arr)
  • 第二步:Add field from calculation转换
    操作类型选Binary operation,操作符选Zip,第一个字段选x_arr,第二个字段选y_arr,新字段命名为xy_pairs(此操作会将两个数组合并为[[x0,y0], [x1,y1], ...]的结构)
  • 第三步:Unwind转换
    选择xy_pairs字段,展开后每一行对应一个[x,y]数组
  • 第四步:Extract fields转换
    选择xy_pairs字段,提取方式选By index,将索引0命名为x、索引1命名为y,最终得到每个坐标点的键值对结构

完成上述步骤后,Grafana的XY图即可正常识别数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:04:55