一个mongo聚合数据的例子

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()));
    }

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

时间: 2024-09-14 08:42:12

一个mongo聚合数据的例子的相关文章

一个删选数据的例子,使用GROUP、DISTINCT实例解析_MsSql

需求描述: 一个表MyImage,列有:号码ID,路径PATH如: ID  PATH1  C:/1  C:/1  D:/2  C:/2  C:/3  A:/3  C:/4  D:/ 写个SQL语句,返回这样的记录的ID号:相同ID存在不同PATH.如上例子,正确的结果应是:ID 1 3 (ID2没有不同PATH,ID4只有一条记录不存在不同PATH)  这是我的SQL语句: 复制代码 代码如下: select ID from [MyImage] as A     group by ID    

一个删选数据的例子,使用GROUP、DISTINCT实例解析

需求描述: 一个表MyImage,列有:号码ID,路径PATH如: ID  PATH1  C:/1  C:/1  D:/2  C:/2  C:/3  A:/3  C:/4  D:/ 写个SQL语句,返回这样的记录的ID号:相同ID存在不同PATH.如上例子,正确的结果应是:ID 1 3 (ID2没有不同PATH,ID4只有一条记录不存在不同PATH) 这是我的SQL语句:复制代码 代码如下:select ID from [MyImage] as A     group by ID     hav

请求网络数据-怎么请求聚合数据的数据,求一个demo,谢谢各位大神

问题描述 怎么请求聚合数据的数据,求一个demo,谢谢各位大神 我自己做的请求不出来数据,下面上一个类的代码.请大神指点指点 package com.action; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.i

一个多线程,SOCKET连接与发送数据的例子。

问题描述 http://download.csdn.net/source/435508一个多线程,SOCKET连接与发送数据的例子. 解决方案 解决方案二:这个简单啊,网上搜一下就得到答案了.

[置顶]C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel,是真尼玛的累,虽然那个时候C#还很菜,也想能不能通过程序来批量获取(所以平时想法要多才好).几经周折,终于发现了HtmlAgilityPack神器,这几年也用HtmlAgilityPack采集了很多类型数据,特别是足球赛事资料库的数据采集以及天气数据采集,都是使用HtmlAgilityPack,所以

大数据有一个前提:数据的取得是合法的

摘要: 精准营销应该分为两种,其一为基于社会属性的,其一为基于兴趣的.所谓社会属性,大致就是性别.年龄.教育程度.收入状况等,当下很多精准营销其实是这一类.而基于兴趣的广 精准营销应该分为两种,其一为基于社会属性的,其一为基于兴趣的.所谓社会属性,大致就是性别.年龄.教育程度.收入状况等,当下很多精准营销其实是这一类.而基于兴趣的广告,最典型的例子就是搜索引擎的关键词广告.基本上搜索引擎不需要知道你的社会属性,也能匹配与你兴趣有那么点关系的广告.你搜索"平板电脑",想必是发生兴趣了.

惊艳全球数据行业的16个数据可视化例子

文章讲的是惊艳全球数据行业的16个数据可视化例子,数据是非常强大的.当然,如果你能真正理解它想告诉你的内容,那它的强大之处就更能体现出来了. 通过观察数字和统计数据的转换以获得清晰的结论并不是一件容易的事.必须用一个合乎逻辑的.易于理解的方式来呈现数据. 谈谈数据可视化.人类的大脑对视觉信息的处理优于对文本的处理--因此使用图表.图形和设计元素,数据可视化可以帮你更容易的解释趋势和统计数据. 但是,并非所有的数据可视化是平等的.(点击"为什么大多数人的图表和图形看起来像废话"了解我想表

Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”

Docker官方论坛中回复最多的一个帖子"在数据容器内升级数据" matlehmann我有一个含数据的容器,它有一个卷(比如在/var/data)中的持久性数据.该容器包含持久性数据对另一个容器的软件.对于该软件的新版本,需要升级所述永久数据(结构或布局改变等).其结果是,我想与在相同的位置已升级的数据的另一数据容器(在/var/data)和仍保留旧数据容器与它的数据不变.这样一来,我可以用旧的数据容器与旧版本的软件,万一出了差错.但是,我怎么能做到这一点?以实现所期望的结果所需要的步

聚合数据-类似于csdn这样的博客系统,应该怎样分表

问题描述 类似于csdn这样的博客系统,应该怎样分表 现在要做一个博客系统,考虑到以后的压力,相对其进行分表,主要是对博客表进行分.那么大家有什么好的建议呢?开始像根据userId进行hash,但在首页聚合数据的时候麻烦啊.按时间进行分表,可是在分页查询的时候有比较麻烦,尤其是在两个表的临界点的时候.大家有什么好的想法吗 解决方案 按时间就可以了. 分页主要是自己计算的时候判断就可以了 解决方案二: 但在首页聚合数据的时候麻烦啊? 这个是什么意思,首页聚合什么数据? 解决方案三: 但在首页聚合数