首页 > 其他分享 >Mongo 聚合操作

Mongo 聚合操作

时间:2023-08-05 10:55:05浏览次数:32  
标签:聚合 Mongo Aggregation group thrOrg addFields 操作 id secOrg

Mongo 聚合

mongo中的聚合通过不同的阶段对数据进行不同的操作,并将每一个阶段操作的结果传递到下一个阶段
mongo中常用的Satges

  • $match 对数据进行过滤, 用于条件筛选
  • project 投影,选择需要使用的字段、对数据进行操作等
  • group 分组,对数据进行分组统计
  • addFields 添加字段

其中的每一个Stage都可以重复出现,按出现的顺序执行操作。

mongo 聚合语句

[
    {"$match": {"operType": {"$in": ["1", "2", "3"]}}},
    {"$group": {"_id": {"secOrg": "$secOrg", "thrOrg": "$thrOrg", "userId": "$userId"}}},
    {"$addFields": {"type": "7", "secOrg": "$_id.secOrg", "thrOrg": "$_id.thrOrg", "userId": "$_id.userId"}},
    {"$group": {"_id": "$secOrg", "num": {"$sum": 1}}},
    {
      "$addFields": {
        "type": "7",
        "secOrg": "$_id.secOrg",
        "dataGroup": "$_id.secOrg"
      }
    }
  ]

match: 筛选特定类型的操作
group:对二级机构、三级机构、用户进行分组
addFields: 将二级结构、三级机构、用户id添加为字段
group:对二级机构分组,并统计数量
addFields:添加字段

使用 spring-data-mongo 进行聚合统计

Aggregation aggregation = Aggregation.newAggregation(
	Aggregation.match(Criteria.where("operType").in("1", "2", "3")),
	Aggregation.group("secOrg", "thrOrg", "userId"),
	Aggregation.addFields().addFieldWithValue("type", "7")
	.addField("secOrg").withValue("$_id.secOrg")
	.addField("thrOrg").withValue("$_id.thrOrg")
	.addField("userId").withValue("$_id.userId").build(),
	Aggregation.group("secOrg", "thrOrg").count().as("num"),
	Aggregation.addFields().addFieldWithValue("type", "7")
	.addField("fondsId").withValue("$_id.secOrg")
	.addField("dataGroup").withValue("$_id.thrOrg").build()

);
System.out.println(aggregation);
AggregationResults<StatisticLog> aggregate = mongoTemplate.aggregate(aggregation, "operationLog", Statistic.class);

如果需要对集合全部数据进行统计,即不分组,那么group中_id设置为null即可,而spring-data-mongo中使用无参的group()方法。

标签:聚合,Mongo,Aggregation,group,thrOrg,addFields,操作,id,secOrg
From: https://www.cnblogs.com/dreamsrj/p/17607624.html

相关文章

  • Mongo 中字符类型数字求和
    在mongo中对字符类型数据求和时结果不是想要的,需要将字符类型数据转换为数字后再进行统计集合中字段同时包含字符型数字和Number类型mongo聚合语句[{"$project":{"size":1,"fsize":{"$convert":{"input":"$size",......
  • 操作系统运行机制
    操作系统通常分批处理环境、交互式环境、实时环境系统调用传递参数方法寄存器堆栈指令自带用户进程在实现系统调用的时候,通过变量传递是不能用于传递参数的 系统调用:调用程序在用户态,被调程序在核心态 处理器中对用户可见的寄存器,通常是对用户程序可用的是:地址寄存器、数据寄存器......
  • 前端学习笔记202305学习笔记第二十天-vue3.0-插槽自定义操作列
    ......
  • 初学C语言day11--文件IO及文件操作
    C语言文件IO文件的分类:文本文件:人能看得懂的文件,存储的是数据ASCII码的二进制'2''5''5'505353二进制文件:人看不懂,存储的是数据的补码25511111111文件IO:FILE*fopen(constchar*path,constchar*mode);功能:打开或创建文件path:文件的路径如果是相对路径,会默认......
  • 俄乌战争中乌克兰的无人机、无人艇的临时操作手——善于玩电子游戏的高手——电玩高手
    看到一个新闻:凌晨450公斤炸弹命中,4000吨级俄军军舰剧烈爆炸:正在逐渐下沉 里面有这么一句话:乌克兰正在高中里搜索那些善于玩电子游戏的高手,让他们操作无人机和无人艇远程袭击俄罗斯目标。   -------------------------------------------------  一个设想:那就是......
  • 操作系统(Operating System)
    一.操作系统的定位操作系统就是搞计算机资源管理的软件统称1.对上就是要管理好各种硬件设备2.对下就是要给应用程序提供一个稳定的运行环境操作系统是软件,硬件和用户之间交换的媒介二.什么是进程(Process/任务(Task))下面的这些都是进程程序是一个可执行文件(静态的),如果双击运行......
  • Mongodb主从复制
    推荐步骤:在centos01上安装MongoDB数据库启动群集功能在centos02上安装MongoDB数据库启动群集功能在centos03上安装MongoDB数据库启动群集功能实验步骤:创建mongodb组和用户解压指定MongoDB安装位置配置优化命令创建mongodb数据库的配置文件修改主配置文件启动mongodb服务将安装完的m......
  • 开源操作
    边框可以改变窗口的大小。3.窗口——标题栏 窗口中最上边的一行是标题栏,标题栏显示已打开应用程序的图标、名称等,还有“最小化”“最大化”和“关闭”按钮。 单击左上角的应用程序图标,会打开窗口中应用程序的控制菜单,使用该菜单也可以实现最小化、最大化和关闭等功能。 拖动标题......
  • 使用 MongoDB 的兄弟,有没有采用 GridFS 做分布式文件系统的?
    修改写补充说明郭理靖,京东开放平台邓涛、Kenny、李波等人赞同压力以及数据量比较大的业务不推荐使用MongoGridFS。MongoGridFS在高并发(每秒写入10M,持续半小时到一个小时)的情况下secondary会无法catchupwithprimary。MongoGridFS不是为分......
  • 操作系统需要重点关注指标
    机器层面的监控分为两部分,带内监控和带外监控。带内监控就是通过带内网络来监控,主要是以在OS里部署Agent的方式,来获取OS的CPU、内存、磁盘、IO、网络、进程等相关监控指标。外监控走的是带外网络,通常和业务网络不互通,通过IPMI、SNMP等协议获取硬件健康状况。IPMI可用于监......