group是较为复杂的聚合操作,与关系型数据库中的group by类似。
group先选定分组依据的键,然后将集合根据键值分组,之后再聚合每一组内的数据产生查询结果。
//MongoDB
db.coll.group({
'key':{//分组依据
'a':true
},
'cond':{'active':1},//查询条件
'reduce': function(obj,prev)//聚合操作
{
prev.csum += obj.c;
},
'initial':{'csum':0}//指定聚合计数器的初始对象
});
下面是在Java中的处理方法:
//统计函数 由js实现
String reduce = "function(doc, prev){" +
" prev.csum += 1;" +
" }";
Query query = Query.query(Criteria.where("active").exists(true));
DBObject result = mongoTemplate.getCollection("XXX").group(new BasicDBObject("a", true),
query.getQueryObject(),
new BasicDBObject("csum", 0),
reduce);//MongoTemplate是spring提供操作mongoDB的
Map<String,Map<String,Double>> map = result.toMap();
得到Map后的代码就不写了,根据自己的业务需求做处理就好了
2万+

被折叠的 条评论
为什么被折叠?



