一个mongo聚合数据的例子

简介: mongo里每天会记录一些这样的数据,要把这些数据按照时间聚合。 function statisticsSchoolForTimes(nowtime) { db.getCollection('all').aggregate( [ {$match:{"time":nowtime}}, { $group:{


mongo里每天会记录一些这样的数据,要把这些数据按照时间聚合。


function statisticsSchoolForTimes(nowtime) {
    db.getCollection('all').aggregate(
    [
        {$match:{"time":nowtime}},
        {
            $group:{
                _id:{"schoolId":"$schoolId","userRole":"$userRole"},
                provinceCode:{$first:"$provinceCode"},
                provinceValue:{$first:"$provinceValue"},
                cityValue:{$first:"$cityValue"},
                cityCode:{$first:"$cityCode"},
                countyCode:{$first:"$countyCode"},
                countyValue:{$first:"$countyValue"},
                schoolLevel:{$first:"$schoolLevel"},
                schoolName:{$first:"$schoolName"},
                schoolId:{$first:"$schoolId"},
                time:{$first:"$time"},
                userRole:{$first:"$userRole"}
            }
         }
    ]).forEach(function(x){
            var praiseNum=db.getCollection('all').find({"schoolId":x.schoolId,"time":x.time,"type":"praise","userRole":x.userRole}).count();
            var downloadNum=db.getCollection('all').find({"schoolId":x.schoolId,"time":x.time,"type":"download","userRole":x.userRole}).count();
            var collectionNum=db.getCollection('all').find({"schoolId":x.schoolId,"time":x.time,"type":             "collection","userRole":x.userRole}).count();
            var commentNum=db.getCollection('all').find({"schoolId":x.schoolId,"time":x.time,"type":"comment","userRole":x.userRole}).count();
            var browseNum=db.getCollection('all').find({"schoolId":x.schoolId,"time":x.time,"type":"browse","userRole":x.userRole}).count();
            db.getCollection('school').insert(x);
            db.getCollection('school').update({"schoolId":x.schoolId,"time":x.time,"userRole":x.userRole},{'$set': {'praiseNum': praiseNum,'downloadNum': downloadNum,'collectionNum': collectionNum,'commentNum': commentNum,'browseNum': browseNum}});
        })
}

java里面每天凌晨定时执行这个函数即可

    private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    public void run() {
        try {
        	System.out.println("开始数据统计聚合任务,时间为:"+formatter.format(Calendar.getInstance().getTime()));
        	aggregate();
            System.out.println("结束数据统计聚合任务,时间为:"+formatter.format(Calendar.getInstance().getTime()));
        } catch (Exception e) {
            System.out.println("-------------数据统计聚合任务发生异常--------------"+e.toString());
        }
    }


    public static void aggregate(){
    	System.out.println("开始数据统计聚合任务,时间为:"+formatter.format(Calendar.getInstance().getTime()));
    	MongoUtils mu = new MongoUtils();
		MongoUtils.createMongoClient();
		DB db=mu.getDB(MongoUtils.DATABASE);
		String nowTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
		db.eval("statisticsDistrictForTimes('"+nowTime+"')");
		db.eval("statisticsSchoolForTimes('"+nowTime+"')");
		mu.closeConnection();
        System.out.println("结束数据统计聚合任务,时间为:"+formatter.format(Calendar.getInstance().getTime()));
    }


聚合之后的数据是这样的:



目录
相关文章
使用mongo聚合分组查询获取每一组的时间最大的一条数据
使用mongo聚合分组查询获取每一组的时间最大的一条数据
1143 0
|
NoSQL Cloud Native MongoDB
mongo 聚合操作
mongo 聚合操作
|
7月前
|
JSON NoSQL MongoDB
mongodb导出聚合查询的数据
mongodb导出聚合查询的数据
|
7月前
|
数据库 Python
Python-ElasticSearch客户端的封装(聚合查询、统计查询、全量数据)
Python-ElasticSearch客户端的封装(聚合查询、统计查询、全量数据)
131 0
MongoDB-聚合操作表达式
字段路径表达式 $<filed>: 使用 $ 来指示字段路径 $<filed>.<sub-field>: 使用 $ 和 . 来指示内嵌文档字段路径
63 0
|
编解码 NoSQL 数据可视化
MongoDB——聚合数组大小做统计
前段时间做统计,我们的平台数据库用的mongodb,其中有一个统计需求如下:需要查询每个用户的转码个数(对应的素材,每个素材可能有多个转码)
mongo数据字段值去重查询
mongo数据字段值去重查询
276 0
|
缓存 自然语言处理 数据挖掘
白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理
白话Elasticsearch50-深入聚合数据分析之基于doc values正排索引的聚合内部原理
112 0
|
数据处理
mongo聚合统计数量
mongo聚合统计数量
139 0
mongo聚合统计数量
|
NoSQL MongoDB Redis
在MongoDB中使用聚合操作筛选与修改字段
在MongoDB中使用聚合操作筛选与修改字段
324 0