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

使用JasperStudio与MongoDB生成带可选参数报表时遇字段未找到问题

问题解决:JasperStudio MongoDB聚合"fields not found"异常

错误原因分析

你的代码有两个核心问题导致字段找不到异常:

  1. 字段引用错误:$match阶段中使用"_id.siteId"是字符串字面量,MongoDB会将其视为要查找的字段名而非文档字段引用,正确的字段引用应该是"$_id.siteId"。
  2. 参数处理错误:$ifNull是MongoDB用于处理文档字段的操作符,不能用来处理Jasper的报表参数$P{p_site_id},直接比较参数值即可。

修正后的聚合命令

{
    "runCommand": {
        "aggregate": "device_inventories",
        "pipeline": [
            { 
                "$group": { 
                    "_id": { 
                        "deviceStatusCode": "$deviceStatusCode", 
                        "siteId": "$siteId"
                    }, 
                    "count": { "$sum": 1 } 
                } 
            },
            {
                "$match": {
                    "$expr": {
                        "$cond": [
                            { "$eq": [ $P{p_site_id}, 0 ] },
                            true,
                            { "$eq": [ "$_id.siteId", $P{p_site_id} ] }
                        ]
                    }
                }
            },
            { 
                "$lookup": { 
                    "from": "device_statuses", 
                    "localField": "_id.deviceStatusCode", 
                    "foreignField": "deviceStatusCode", 
                    "as": "statusInfo" 
                } 
            },
            { 
                "$lookup": { 
                    "from": "sites", 
                    "localField": "_id.siteId", 
                    "foreignField": "siteId", 
                    "as": "sitesInfo" 
                } 
            },
            {
                "$project": {
                    "_id": 0,
                    "statusInfo": { "$first": "$statusInfo.deviceStatus" },
                    "sitesInfo": { "$first": "$sitesInfo.siteName" },
                    "count": 1
                }
            }
        ]
    }
}

额外配置注意事项

  • Jasper参数设置:确保p_site_id参数的默认值设为0,类型选择java.lang.Integer,避免空值导致的逻辑错误。
  • 参数传递兼容:若使用低版本JasperStudio,可能需要用?占位符替换$P{p_site_id},然后在查询参数映射中绑定$P{p_site_id}(两个?都绑定同一个参数),确保参数正确传递到MongoDB聚合命令中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:48:24