如何让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
相关产品推荐
相关产品推荐

