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

Jaspersoft Studio中MongoDB查询$arrayToObject报错及格式转换问题

问题原因和解决方案

1. $arrayToObject报错根因

你遇到的报错是因为orderlogss数组中存在没有stat字段的元素(你提供的样本数据里第4个日志元素仅包含ctr和time字段):

'$arrayToObject requires an object keys of 'k' and 'v'. Found incorrect number of keys:1'
当$map处理无stat字段的元素时,生成的对象中k值为null,Jaspersoft Studio的MongoDB驱动会默认删除值为null的键,导致该元素仅剩下v一个键,触发$arrayToObject的格式校验失败。

2. 字段类型保留方案

要让ctr保持ObjectId格式、time保持ISODate格式,需做两处调整:

  • 在Jaspersoft Studio的MongoDB数据源配置中,关闭「自动将BSON类型转换为字符串」的默认选项
  • 查询中不要手动对ObjectId、ISODate字段做字符串拼接/转换操作,直接引用原生字段即可

3. 修复后的查询语句

你可以先过滤无stat的日志元素,再执行后续转换,若需要同时保留ctr和time字段,可以调整v的结构:

[
    {
        $project: {
            itemfinal: "$items",
            ordernumberfinal: "$ordernumbers",
            rows: {
                $arrayToObject: {
                    $map: {
                        // 先过滤掉没有stat字段的日志元素
                        input: {
                            $filter: {
                                input: "$orderlogss",
                                cond: { $ne: ["$$this.stat", undefined] }
                            }
                        },
                        in: {
                            "k": "$$this.stat",
                            // 如果不需要保留ctr,直接把v替换为"$$this.time"即可
                            "v": {
                                "ctr": "$$this.ctr",
                                "time": "$$this.time"
                            }
                        }
                    }
                }
            }
        }
    },
    {
        "$addFields": {
            "rows.finalitem": "$itemfinal",
            "rows.finalorder": "$ordernumberfinal"
        }
    },
    {
        "$replaceRoot": {
            "newRoot": "$rows"
        }
    }
]

注意事项

你的样本数据中存在2条stat为Ordered的日志,$arrayToObject会默认用最后出现的元素覆盖前面相同key的内容,如果需要保留所有日志,可以将k修改为{$concat: ["$$this.stat", "_", {$toString: "$$this.ctr"}]},用stat+ctr的唯一值作为key。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:24:03