MongoDB之aggregate聚合函数应用实例讲解,mongodbaggregate
前言
公司最近在使用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); //返回是一个集合 Listiterator= (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); }
这样可以拿到统计总和,平均数,最大值都可以
结果:
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。