在项目中接触到对一组数据进行分组才研究了一下groupBy对象
public void getBy(String compId){ GroupBy gb=new GroupBy("goodsId").initialDocument("{count:0}").reduceFunction("function(doc, result){result.count++}"); GroupByResults<CompGoods> group = mongoTemplate.group( "compGoods", gb, CompGoods.class); DBObject rawResults = group.getRawResults(); //retval为系统默认规定里面包括分组的字段和你在initialDocument设置的值 BasicDBList object = (BasicDBList)rawResults.get("retval"); for (int i = 0; i < object.size(); i++) { BasicDBObject object2 = (BasicDBObject) object.get(i); Double object3 = (Double)object2.get("count"); System.out.println(object3); } //这个返回为对象 Iterator<CompGoods> iterator = group.iterator(); while(iterator.hasnext()){ iterator .next(); } }
//第一个参数为根据哪个列名进行分组 第二个参数为返回个格式(个人理解是多放回出一个字段) 第三个为应用的函数。。 经测试第二个和第三个参数必须存在
//第三个参数中:doc是根据查询条件(相当于where条件)获取的每一条数据,result是最后的查询结果,初始值就是initial对象; GroupBy gb=new GroupBy("goodsId").initialDocument("{count:0}").reduceFunction("function(doc, result){result.count++}");
//第一个参数为mongo表的名称 第二个为groupby对象的引用 第三个是返回对象的实例
GroupByResults<CompGoods> group = mongoTemplate.group( "compGoods", gb, CompGoods.class);