我收集了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
}
);
我得到了这个数据
但我想转行" 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 \" ]
答案 0 :(得分:0)
$ arrayToObject是版本3.6中的新增功能。 我使用mongoDB版本3.4