Mongo4.2
拥有一堆用于服务器实例和CPU使用的数据。
{
"_id" : "1",
"instance" : "172.00.00.01",
"client" : "A",
"date" : ISODate("2020-12-06T22:47:00.163Z"),
"app" : 0.0133317
}
{
"_id" : "2",
"instance" : "172.00.00.01",
"client" : "A",
"date" : ISODate("2020-12-06T22:47:03.163Z"),
"app" : 0.0400000
}
{
"_id" : "3",
"instance" : "172.00.00.02",
"client" : "B",
"date" : ISODate("2020-12-06T22:47:00.163Z"),
"app" : 0.0800000
}我希望这是我的结果,数据按分钟分组,然后用MAX "app“值为每个实例进行字段。
{
"_id" : {
"minute" : 47,
"hour" : 22,
"day" : 6,
"month" : 12,
"year" : 2020
},
"172.00.00.01": 0.0400000,
"172.00.00.02": 0.0800000
}所以我的汇总需要分组才能得到会议记录:
{
"$group": {
"_id": {
"minute": {
"$minute": {
"date": "$date",
"timezone": "America/Chicago"
}
},
"hour": {
"$hour": {
"date": "$date",
"timezone": "America/Chicago"
}
},
"day": {
"$dayOfMonth": {
"date": "$date",
"timezone": "America/Chicago"
}
},
"month": {
"$month": {
"date": "$date",
"timezone": "America/Chicago"
}
},
"year": {
"$year": {
"date": "$date",
"timezone": "America/Chicago"
}
},
instance: '$instance',
client: '$client'
},
app: {
$max: '$app'
}
}
}这条管道给我的结果是:
{
"_id" : {
"minute" : 47,
"hour" : 22,
"day" : 6,
"month" : 12,
"year" : 2020,
"instance" : "172.00.00.01",
"client" : "A"
},
"app" : 0.040000
},
{
"_id" : {
"minute" : 47,
"hour" : 22,
"day" : 6,
"month" : 12,
"year" : 2020,
"instance" : "172.00.00.02",
"client" : "B"
},
"app" : 0.080000
}因此,要获得所需的输出,我知道我需要在没有实例/客户端的情况下再次分组来组合这两者,但是如何动态地将实例变量作为字段名呢?这些不管用!
{
"$addFields": {
"[$instance]": "$app"
}
},
{
"$addFields": {
"[$$instance]": "$app"
}
},
{
"$addFields": {
"$instance": "$app"
}
},
{
"$addFields": {
"$$instance": "$app"
}
},发布于 2020-12-07 07:57:40
使用您的代码,另外
{
$group: {
_id: {
day: "$_id.day",
hour: "$_id.hour",
minute: "$_id.minute",
month: "$_id.month",
"year": "$_id.year"
},
data: {
$push: { k: "$_id.instance", v: "$app" }
}
}
},
{
$addFields: {
data: { "$arrayToObject": "$data" }
}
},
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [ "$data", "$$ROOT" ]
}
}
},
{
$project: {
data: 0
}
}Working 蒙戈游乐场
https://stackoverflow.com/questions/65177576
复制相似问题