mongodb高聚合查询的问题?

问题描述

把指定格式的数据聚合成指定的格式

相关代码

{ 
    "_id" : "10.182.135.21_CPU_20180627200000", 
    "parameter" : {
        "CPUUtil" : [
            {
                "time" : ISODate("2018-06-27T12:07:19.000+0000"), 
                "value" : 15.0
            }, 
            {
                "time" : ISODate("2018-06-27T12:08:24.000+0000"), 
                "value" : 0.0
            }, 
            {
                "time" : ISODate("2018-06-27T12:09:29.000+0000"), 
                "value" : 0.0
            }
        ]
    }
}
{ 
    "_id" : "10.182.135.21_CPU_20180627210000", 
    "parameter" : {
        "CPUUtil" : [
            {
                "time" : ISODate("2018-06-27T13:07:01.000+0000"), 
                "value" : 0.0
            }, 
            {
                "time" : ISODate("2018-06-27T13:08:06.000+0000"), 
                "value" : 2.0
            }, 
            {
                "time" : ISODate("2018-06-27T13:09:11.000+0000"), 
                "value" : 0.0
            }
        ]
    }
}

你期待的结果是什么?实际看到的错误信息又是什么?

首先聚合成一个对象,其中包含两个参数“time”和“value”,两个参数都是数组的形式;其次把时间格式ISODate转化成“yyyy-MM-DD HH:mm:ss”的形式

{
    "time": [
        "2018-06-27 12:07:19",
        "2018-06-27 12:08:24",
        "2018-06-27 12:09:29",
        "2018-06-27 13:07:01",
        "2018-06-27 13:08:06",
        "2018-06-27 13:09:11"
    ],
    "value": [
        15.0,
        0.0,
        0.0,
        0.0,
        2.0,
        0.0
    ]
}
阅读 1.6k
2 个回答
db.test.aggregate([{
    $project: {
        time: {
             $map: {
                input: "$parameter.CPUUtil",
                as: "u",
                in: {
                    $dateToString: {
                        format: "%Y-%m-%d %H:%M:%S",
                        date: "$$u.time"
                    }
                }
             }
        },
        value: {
             $map: {
                input: "$parameter.CPUUtil",
                as: "u",
                in: "$$u.value"
             }
        }
    }
}]);

aggregate聚合语句如下:

clipboard.png

执行结果:
{

"_id" : NumberInt(0),
"time" : [
    "2018-06-27 12:07:19", 
    "2018-06-27 12:08:24", 
    "2018-06-27 12:09:29", 
    "2018-06-27 13:07:01", 
    "2018-06-27 13:08:06", 
    "2018-06-27 13:09:11"
], 
"value" : [
    15.0, 
    0.0, 
    0.0, 
    0.0, 
    2.0, 
    0.0
]

}

如发现问题或者有更好的答案还请不吝赐教!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题