mongodb聚合查询
2016-04-23 本文已影响0人
小青青的大胖纸
一个常用group查询
以前关系型数据库就经常有个需求
按某字段分组,然后返回每组最近时间一条记录的集合
最近使用mongodb也遇到了这个需求,查了不少地方也没有头绪,随手翻了翻手头的书发现了mapreduce,最后实现了
{'group' :
{'ns' : 'applyuser',
'key' : {'name':true},
'initial' : {'applyTime' :0},
'$reduce' : 'function(doc,prev){
if(doc.applyTime >prev.applyTime){
prev.applyTime = doc.applyTime;
prev.name = doc.name;
prev.phone = doc.phone;
prev._id = doc._id;}}',
'condition' : {'actID' : "+actID+"}
}
}
mongotemplate代码如下
String jsonReduce = "{'group' : {'ns' : 'applyuser','key' : {'name':true},'initial' : {'applyTime' : 0},'$reduce' : 'function(doc,prev){if(doc.applyTime > prev.applyTime){prev.applyTime = doc.applyTime;prev.name = doc.name;prev.phone = doc.phone;prev._id = doc._id;}}', 'condition' : {'actID' : "+actID+"}}}";
CommandResult mapReduce = mongoTemplate.executeCommand(jsonReduce);
List<BasicDBObject> l = (List<BasicDBObject>)mapReduce.get("retval");