mongodb的分组求和(使用aggregate方法)
mongo的分组求和目录
- 1、mongo脚本语句的分组求和
- 2、java中的spring-data-mongodb分组求和
1、mongo脚本语句的分组求和
mongo文档集合结构:
脚本如下:
db.getCollection("StatisticalEmployees").aggregate([{$match: {'org_id': "a024db93c3b311e9a9bc98039b473960",'status': 0,'date': {$gte: ISODate("2019-07-01 00:00:00"),$lt: ISODate("2019-08-01 00:00:00")} }}, {$group: {"_id": {"org_id": "$_id.org_id","date": "$_id.date"},"total": {"$sum": "$fans_number"}}}, {$project: {"_id": 0,"total": 1}}])
解读:
(1)match:查询的筛选条件
(2)group:
1)_id:分组的字段
2)total:所要取的聚合函数
[1] $sum:表示求和的聚合函数
(3)project:查询后的显示字段,0:表示不显示;1:表示显示
2、java中的spring-data-mongodb分组求和
注意点:
(1)0要使用该管道方法,spring-data-mongodb 必须 是 1.10.10 版本以上
(2)mongo数据库存储的是文档,就像java的.class文件;故而建议字段多单词时,使用驼峰命名
(3)在此方法中,需特别注意的是字段映射问题,建议 java对象和mongo数据库 均 使用驼峰命名法(以避免映射问题)
结果如下:
解读:
(1)Aggregation.match(Criteria语句):存放的是条件,类似于MySQL中的where语句
(2)Aggregation.group(String… key):参数表示 可变多参数 ,指的是分组参数或分组多参数
(3)Aggregation.group(String… key).sum(字段名).as(别名):如同MySQL中的聚合函数与别名,需要 一起使用
(4)Aggregation.group(String… key):与MySQL相同, 如果不是分组参数,在查询的字段中就一定要是聚合函数;否则报错 。亦可 将其余要的字段当做分组参数 (即多分组参数)
(5)Aggregation.project(String… 别名):可变多参数,将 group方法里的聚合函数别名 放于此,表明查询出所要的聚合函数
注意: 在mongo中,分组求和时,会将 分组参数的值赋给mongo数据库自动生成的_id字段 ,表示 唯一值
(1)如果直接使用Aggregation.project(String key, String… 别名)的形式,实际上的 key值会在_id字段 ,而 key字段为null
(2)Aggregation.project(String… 别名).and(String 别名).previousOperation():表示 将_id字段的值赋给前面and()中的别名
(3)一旦 分组参数有多个 ,_id 将会采用 json的格式 , 包含多个 参数字段;故而使用第二点时,and()中的 别名也将会是json格式 (多个参数字段);如: and()中的别名 = _id = {key1: “key1”, key2: “key2”}
(4)Aggregation.project(String… 别名).andInclude(String key1).andInclude(String key2):表示查询出所要的分组参数(其中的 key1、key2应当是group() 中的分组字段);实际上就是 相当于 key1 = _id.key1 = “key1”;key2 = _id.key2 = "key2"
mongodb的分组求和(使用aggregate方法)相关推荐
- linq 分组求和的一般方法
//var query = from d in expenseApplyModel.ApplyBillList.AsEnumerable() // group d by d.ExpenseItemID ...
- Python之数据聚合——aggregate()方法
文章目录 使用内置统计方法聚合数据 面向列的聚合方法 aggregate()方法 对每一列数据应用同一个函数 对某列数据应用不同的函数 对不同列数据应用不同函数 使用内置统计方法聚合数据 实现数据拆分 ...
- 对对象数组进行分组的最有效方法
本文翻译自:Most efficient method to groupby on an array of objects What is the most efficient way to grou ...
- MongoDB sql分组查询,以及Java操作MongoDB分组查询
一.MongoDB SQL 1.使用group方法分组(写法一) select c_sender,c_sendtime,total,dep_ids,avg from goods_order group ...
- java steam 排序_java8 stream自定义分组求和并排序的实现
本文主要介绍了java8 stream自定义分组求和并排序的实现,分享给大家,具体如下: public static void main(String[] args) { List list = ne ...
- Linq专题之提高编码效率—— 第一篇 Aggregate方法
我们知道linq是一个很古老的东西,大家也知道,自从用了linq,我们的foreach少了很多,但有一个现实就是我们在实际应用中使用到的却是屈指可数 的几个方法,这个系列我会带领大家看遍linq,好的 ...
- c语言分组求和函数,R语言 实现data.frame 分组计数、求和等
df为1个data.frame对象,有stratum和psu两列,这里统计stratum列计数 方法1: cnt = table(df$stratum) 方法2: cnt = tapply(df$ps ...
- C语言指针年龄段分组,[问题]数字分组求和,当和最大的组与和最小的组差最小时,输出...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 经过一个月的学习.我想出来了一种算法,各位高手指点 我是楼主 #include int arrgroup[11]={0}; /*表示分组情况的数组*/ i ...
- Java 8中 直接通过List进行分组求和
// Java8 中 List.stream的分组求和方法Map<String, Long> map = list.stream().collect(Collectors.grouping ...
最新文章
- 项目2---机柜和物理服务器
- node.js 没有转发_如何用Nodejs编写一个定时消息提醒应用?
- SET_TABLE_FOR_FIRST_DISPLAY 参数 I_SAVE
- TCP的ACK确认系列 — 快速确认
- 震惊!递推与递归竟然可以这么编!%99的程序员都不知道!
- 亿佰特物联网通信专家:蓝牙模块和 Zigbee协议模块的区别
- 网络IPC非阻塞和异步I/O
- 信息学奥赛一本通(1398:短信计费)
- Repeater绑定ArrayList数据源
- ftk学习记(输入法篇)
- zabbix_server执行window脚本出现中文乱码如何解决
- linux下的5个查找命令
- 基于STC89C52的小车制作上篇,用电机将小车驱动起来之对L298N逻辑输入N1~N4详解
- php使用获取mysqlerror时报错Call to undefined function mysql_error()
- 淘宝补单的一些见解和经验分享,仅供参考
- 实现计算机联网的最大好处是,职.称计算机考试多项选择题考试卷模拟考试题...
- 微信小程序合成二维码海报
- 学会用打码平台处理验证码
- APMServ 5.2.6虚拟主机配置bug
- 关于UITableView的Cell复用谈谈我的一些心得滴水穿石
热门文章
- 教你学会u盘重装win10系统,u盘系统盘安装win10
- 工作一周随笔记———一个即将踏入编程的少年
- 《提问的智慧》 - 懒人的脑图
- php fpm 测试,PHP脚本FPM环境最大执行时间研究
- 上海电信大数据平台:实现客户的私人订制
- Python代码写好了怎么运行?
- qcustomplot圆_Qt之QCustomPlot(图形库)
- HTML网页设计期末课程大作业~仿腾讯游戏官网设计与实现(HTML+CSS+JavaScript)
- 计算机相关美文摘抄,半途而废的人生很美美文摘抄
- Learning to Track at 100 FPS with Deep Regression Networks全文翻译