我试图移动foward,我想我不再那么远了。再次为你的帮助。我只得到一个日期结果请求(见编辑)。我不知道我怎么能得到结果我调整了匹配条件,包括所有必需的文件。我不知道为什么你把$放在首位。
db.collection.aggregate([
{ "$match": {"CollectionTime": { $gte: ISODate("2016-11- 10T00:00:00.000Z")},"Rx Rate": { $exists: true }}},
{ "$group": {
"_id": "$ResourceName",
DeviceName: { $first: "$DeviceName" },
ResourceName: { $first: "$ResourceName" },
Date: { $first: "$CollectionTime" },
AVGRxRATE: { $avg: "$Rx Rate" },
AVGTxRATE: { $avg: "$Tx Rate" },
MaxRxRATE: { $max: "$Rx Rate" },
MaxTxRATE: { $max: "$Tx Rate" }
}
},
{
$project: {
_id: 0,
DeviceName: 1,
ResourceName: 1,
Date: { $dateToString: { format: "%Y-%m-%d", date: "$Date" } },
AVGRxRATE: 1,
AVGTxRATE: 1,
MaxRxRATE: 1,
MaxTxRATE: 1
}
}
])
答案 0 :(得分:0)
我认为这正是您所寻找的 - 您在汇总管道中有一些不必要的步骤。
$unwind用于将数组拆分为单独的文档,$project用于重新整形或重命名字段。
db.u2000.aggregate([
{ "$match": {"CollectionTime": { $gte: ISODate("2016-11-05T00:00:00.000Z")}}},
{ "$group": {
"_id": null,
AVGRxRATE: { $avg: "$Rx Rate" },
AVGTxRATE: { $avg: "$Tx Rate" },
MaxRxRATE: { $max: "$Rx Rate" },
MaxTxRATE: { $max: "$Tx Rate" }
}
}
])
这导致您的“'文档案例,但应该适用于多个文档:
{
"_id" : null,
"AVGRxRATE" : 522,
"AVGTxRATE" : 176,
"MaxRxRATE" : NumberLong(522),
"MaxTxRATE" : NumberLong(176)
}
*编辑*
运行以下聚合以获得您想要的确切输出...请注意,这并不是特别对任何内容进行分组,而是更多地操纵一个文档来按照您要求的方式对其进行整形,因为我们按空分组。
db.u2000.aggregate([
{ "$match": {"CollectionTime": { $gte: ISODate("2016-11-05T00:00:00.000Z")}}},
{ "$group": {
"_id": null,
DeviceName: { $first: "$DeviceName" },
ResourceName: { $first: "$ResourceName" },
Date: { $first: "$CollectionTime" },
AVGRxRATE: { $avg: "$Rx Rate" },
AVGTxRATE: { $avg: "$Tx Rate" },
MaxRxRATE: { $max: "$Rx Rate" },
MaxTxRATE: { $max: "$Tx Rate" }
}
},
{
$project: {
_id: 0,
DeviceName: 1,
ResourceName: 1,
Date: { $dateToString: { format: "%Y-%m-%d", date: "$Date" } },
AVGRxRATE: 1,
AVGTxRATE: 1,
MaxRxRATE: 1,
MaxTxRATE: 1
}
}
])
结果:
{
"DeviceName" : "OLT",
"ResourceName" : "OLT/Frame:0/Slot:19/Port:0",
"Date" : "2016-11-07",
"AVGRxRATE" : 522,
"AVGTxRATE" : 176,
"MaxRxRATE" : NumberLong(522),
"MaxTxRATE" : NumberLong(176)
}