这是我在mongodb中的数据
{
"_id" : ObjectId("5a77e82c19e5b90363fe55d4"),
"serviceId" : 85,
"clusterId" : 122,
"metricTimestamp" : ISODate("2018-02-05T04:33:58.000Z"),
"metricNames" : [
"host",
"count",
"time",
"out"
],
"metricValues" : [
"wwe.123.com",
"8829",
"2018-02-05T04:16:02.685Z",
"25327782"
],
"createtime" : ISODate("2018-02-05T05:14:20.273Z")
}
我希望聚合数据:
db.getCollection('metrics.value').aggregate([
{ $match: {
'serviceId': 85,
'metricTimestamp':{
$gte: ISODate("2018-02-03T04:33:58"),
$lte: ISODate("2018-02-05T04:33:58")
}
}},
{ $project: {
host: { $arrayElemAt:["$metricValues", 0]},
count:{ $arrayElemAt:["$metricValues", 1]}
},
{$group:{}}
}])
我想按主持人分组(这里是" wwe.123.com"),并汇总计数(这里是" 8829")。我不知道如何从字符串转换为int(parseInt不工作)。请帮我解决这些问题。
答案 0 :(得分:0)
db.getCollection('foo').aggregate([
{ $match:
{ "serviceId" : 85,
"metricTimestamp" :
{ $gte: ISODate("2018-02-05T04:33:58.000Z"),
$lte: ISODate("2018-02-05T04:33:58.000Z") }}},
{ $project :
{ "_id" : 0,
"host" : { $arrayElemAt:["$metricValues", 0] },
"count" : { $arrayElemAt:["$metricValues", 1] }}},
])
输出:
{
"host" : "wwe.123.com",
"count" : "8829"
}
然后在$group
之后$projection
,您需要将count
字段转换为int。如何做到这一点已经被问及并回答here。将字段转换为int后,只需在$projection
{ $group : { _id : "$host", count : { $sum : "$count"}}}