当前位置: 移动技术网 > IT编程>数据库>DB2 > MongoDB之aggregate聚合函数应用实例讲解

MongoDB之aggregate聚合函数应用实例讲解

2018年09月29日  | 移动技术网IT编程  | 我要评论

前言

公司最近在使用mongodb作为存储,学习应用了mongodb的使用。作为非关系性数据库的代表,主要是以文档格式存储的数据库,灵活的字段,收到很多开发人员的喜欢。

本人在使用了一天的mongodb后感觉确实很方便,程序中不用再去定义实体bean,字段灵活,可多可少。适合需要存储大量数,高并发,弱事务的互联网应用开发,开发方便。

今天总结的是mongodb之aggregate函数的应用,主要用于数据记录的分析,例如求和,求平均值,最大最小值,分页,排序等操作,方便了数据的查询统计。

需求

开发语言为java

项目中需要统计文章的次数,最大阅读时间,平均阅读时间等。

数据库文档字段为:

{
    "_id" : "1234567",
    "_class" : "com.opinion.bean.qqbean",
    "groupname" : "小学中群",
    "qqnumber" : 127,
    "qqcontext" : "一句话",
    "period" : 0
}
{
    "_id" : "1234568",
    "_class" : "com.opinion.bean.qqbean",
    "groupname" : "高中群",
    "qqnumber" : 128,
    "qqcontext" : "两句话",
    "period" : 1
}
{
    "_id" : "1234569",
    "_class" : "com.opinion.bean.qqbean",
    "groupname" : "大学群",
    "qqnumber" : 129,
    "qqcontext" : "两句话",
    "period" : 1
}

应用:

public resultbean getarticlerecordt(){
        dbobject query=new basicdbobject().append("_class","com.opinion.bean.qqbean");
        //根据文章id和群id查出该文章阅读量
        int readcount=mongotemplet.getcollection("qqbean").find(query).count();
        //定义匹配函数使用$match
        dbobject match=new basicdbobject().append("$match",query);
        //这里必须定义_id
        dbobject total=new basicdbobject("_id","total");
        total.put("sum", new basicdbobject("$sum","$qqnumber"));
        total.put("avg", new basicdbobject("$avg","$qqnumber"));
        total.put("max", new basicdbobject("$max","$qqnumber"));
        //定义统计函数使用$group
        dbobject groupfields = new basicdbobject().append("$group",total);
        //aggregate参数是一系列条件
        aggregationoutput output=mongotemplet.getcollection("qqbean").aggregate(match,groupfields);
        //返回是一个集合
        list iterator= (list) output.results();
        for (dbobject dbobject:iterator){
            system.out.println(dbobject.get("sum"));
            system.out.println(dbobject.get("avg"));
        }
        map periodmap=new linkedhashmap<>();
        int period;
        for (int i=0;i<=24;i=i+3){
            query.put("period",i);
            period=mongotemplet.getcollection("qqbean").find(query).count();
            periodmap.put("perid"+i,period);
        }

        map map=new hashmap<>();
        map.put("qq","1111");
        map.put("periodmap",periodmap);
        return new resultbean(map);
    }

这样可以拿到统计总和,平均数,最大值都可以

结果:

这里写图片描述

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网