在$ group阶段返回AVG

时间:2016-11-09 15:15:18

标签: mongodb mongodb-query aggregation-framework

我试图移动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
    } 
  }
  ])

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)
}