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

为MongoDB集合各文档制作Grafana时序图遇格式识别问题求助

解决Grafana无法识别MongoDB时序数据的问题

问题分析

你当前的聚合查询把每个文档的所有数据点打包到datapoints数组中,这种嵌套结构不符合Grafana MongoDB数据源对时序数据的解析要求,Grafana更适配每个数据点作为独立文档的扁平结构,同时需要明确的metric标识来区分时序系列。

修改后的聚合查询

human_pos.POS.aggregate([
    {"$match": {"FRAME": {"$exists": true}}},
    {"$project": {
        "data": {
            "$zip": {
                "inputs": ["$FRAME", "$NOSE_Y"]
            }
        },
        "doc_id": "$_id"
    }},
    {"$unwind": "$data"},
    {"$project": {
        "time": {"$multiply": [{"$arrayElemAt": ["$data", 0]}, 1000]},
        "value": {"$arrayElemAt": ["$data", 1]},
        "metric": "nose_y_position",
        "doc_id": 1,
        "_id": 0
    }},
    {"$sort": {"time": 1}}
])

关键调整说明

  • 移除最后的$group阶段:直接输出每个FRAME-NOSE_Y对作为独立文档,Grafana可直接解析这种结构
  • 添加metric字段:Grafana时序图需要该字段标识数据系列,可根据需求修改名称
  • 保留doc_id作为标签:方便在Grafana中按不同原始文档(比如不同的人体追踪记录)过滤或区分多条时序曲线

Grafana配置步骤

  1. 在MongoDB查询面板中,设置Format as: Time series
  2. 字段映射:
    • Time字段选择time
    • Value字段选择value
    • Metric字段选择metric
    • 可选:将doc_id添加为Tag,用于区分不同系列

额外优化(可选)

如果你的FRAME是帧率单位(比如30帧/秒),想要将X轴转换为实际时间偏移而非1970年起始的时间戳,可以修改time的计算逻辑:

"time": {"$multiply": [{"$arrayElemAt": ["$data", 0]}, 1000/30]} // 30为帧率,根据实际情况调整

同时在Grafana图表的X轴设置中,将Mode从Time改为Series,即可显示相对时间轴。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:32:04