mongodb分组统计

本文介绍如何使用MongoDB的聚合框架实现字段类型的分组统计及数组元素频次统计的方法,并提供mongodbTemplate对应的Java实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、对字段(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

MongoDB统计文档(Document)的数组(Array)中的各个元素出现的次数

https://www.cnblogs.com/hapjin/p/7944404.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值