mongodb的分组求和(使用aggregate方法)

mongo的分组求和目录

  • 1、mongo脚本语句的分组求和
  • 2、java中的spring-data-mongodb分组求和

1、mongo脚本语句的分组求和

mongo文档集合结构:

mongodb的分组求和(使用aggregate方法)_第1张图片

脚本如下:

	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数据库 使用驼峰命名法(以避免映射问题)
mongodb的分组求和(使用aggregate方法)_第2张图片
   结果如下:
mongodb的分组求和(使用aggregate方法)_第3张图片
解读:
     (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"

你可能感兴趣的:(java,mongo)