MongoDB之aggregate聚合函数应用实例讲解
程序员文章站
2022-06-09 23:22:00
前言
公司最近在使用mongodb作为存储,学习应用了mongodb的使用。作为非关系性数据库的代表,主要是以文档格式存储的数据库,灵活的字段,收到很多开发人员的喜欢。
本人在使用了一天的mongo...
前言
公司最近在使用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); }
这样可以拿到统计总和,平均数,最大值都可以
结果:
下一篇: 关于快速操作使用的教程实例