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");
上一篇下一篇

猜你喜欢

热点阅读