一、对字段(protocol)下的不同类型进行分组统计:
db.getCollection('xxx').aggregate([
{ "$group": {
"_id": {
"protocol": "$protocol"
},
"protocolCount": { "$sum": 1 }
}}
])
或
db.getCollection('bp0501_dev').aggregate([
{ "$group": {
"_id": "$protocol",
"protocolCount": { "$sum": 1 }
}}
])
加过滤:
db.getCollection('bp0501_dev').aggregate([
{"$match":{"userid":"bbdz"}},
{ "$group": {
"_id": "$protocol",
"protocolCount": { "$sum": 1 }
}}
])
对应的mongodbTemplate写法:
field是要统计的字段名(对应上边的protocol字段,protocolCount是统计名称),tbName是对应的表名("xxx")
----都是String类型
Aggregation agg = Aggregation.newAggregation(
Aggregation.group(field).count().as("sum")
);
AggregationResults results = ppmongoTemplate.aggregate(agg,tbName, BasicDBObject.class);
List list = results.getMappedResults();
二、统计userid(字段,类型是数组)内相同数据出现的次数:
db.getCollection('xxx').aggregate( [
{$unwind:"$userid"},
{$group:{_id:"$userid",count:{$sum:1}}},
{$project:{_id:0,count:1,userid:"$_id"}}
])
加分页:
db.getCollection('bp0501_dev').aggregate( [
{$unwind:"$userid"},
{$group:{_id:"$userid",count:{$sum:1}}},
{$project:{_id:0,count:1,userid:"$_id"}},
{$skip:0},
{$limit:5}
])
对应的mongodbTemplate写法:
Aggregation agg = Aggregation.newAggregation(
Aggregation.unwind(field),
Aggregation.group(field).count().as("sum")
);
注:默认会把分组的字段放在_id 上,(这里_id:0)去掉(及修改)_id字段名为userid, 查询出来的统计字段是sum,而count:1是修改名字sum为count
{$unwind:"$userid"} //分解userid这个数组
{$project:{_id:0,count:1,userid:"$_id"}} //这句小编还不知怎么写
详细请看下面的链接
如:
1、修改前
[
{
"_id": "5ce745712bd4f9d6f374e620",
"sum": 5
}
]
2、修改后
[
{
"count" : 5.0,
"userid" : "5ce745712bd4f9d6f374e620"
}
]
由于表数据不能复制和转载,在这里直接分享博主的连接,大家自己看吧,这里只做分享:
原文来自:https://blog.youkuaiyun.com/weixin_43678764/article/details/85262969
https://blog.youkuaiyun.com/ruoguan_jishou/article/details/79289369