Mongodb如何转动字段?

时间:2018-03-11 06:30:48

标签: mongodb

我收集了mongo db, 所以我想要字段:Ip UtilizationReports.Start UtilizationReports.CpuReports.0.ProcName UtilizationReports.CpuReports.0.MaxUsage UtilizationReports.CpuReports.1.ProcName UtilizationReports.CpuReports.1.MaxUsage

为此我使用此代码:

db.Agents.aggregate(
    [
        { 
            "$project" : {
                "UtilizationReports.Start" : 0.0, 
                "UtilizationReports.Interval" : 0.0, 
                "UtilizationReports.LastLogin" : 0.0, 
                "Configuration" : 0.0, 
                "HealthReports" : 0.0, 
                "_id" : 0.0
            }
        }, 
        { 
            "$unwind" : {
                "path" : "$UtilizationReports.CpuReports"
            }
        }, 
        { 
            "$match" : {
                "UtilizationReports.CpuReports.0" : {
                    "$exists" : true
                }, 
                "UtilizationReports.0.CpuReports.0.ProcName" : {
                    "$exists" : true
                }
            }
        }
    ], 
    { 
        "allowDiskUse" : false
    }
); 

我得到了这个数据

enter image description here

但我想转行" ProcName"到列,值将是" MaxUsage"

我尝试使用此代码,但它不起作用:

db.Agents.aggregate(
    [
        { 
            "$project" : {
                "tmp" : {
                    "$arrayToObject" : {
                        "$zip" : {
                            "inputs" : [
                                "$items.key", 
                                "$items.value"
                            ]
                        }
                    }
                }
            }
        }, 
        { 
            "$group" : {
                "_id" : {
                    "Ip" : "$Ip", 
                    "StartReport" : "$UtilizationReports.Start"
                }, 
                "items" : {
                    "$addToSet" : {
                        "key" : "$UtilizationReports.CpuReports.ProcName", 
                        "value" : "$UtilizationReports.CpuReports.MaxUsage"
                    }
                }
            }
        }, 
        { 
            "$addFields" : {
                "tmp.Ip" : "$_id.Ip", 
                "tmp.StartReport" : "$_id.StartReport"
            }
        }, 
        { 
            "$replaceRoot" : {
                "newRoot" : "$tmp"
            }
        }
    ], 
    { 
        "allowDiskUse" : true
    }
);

错误消息: 广告投影规范,在排除预测期间不能包含字段或添加计算字段:{UtilizationReports.Interval:0.0,UtilizationReports.LastLogin:0.0,Configuration:0.0,HealthReports:0.0,_id:0.0,tmp:{$ arrayToObject:{$ zip :{inputs:[\" $ items.key \",\" $ items.value \" ]

示例输出: enter image description here

1 个答案:

答案 0 :(得分:0)

$ arrayToObject是版本3.6中的新增功能。 我使用mongoDB版本3.4