前提:本人采用mongodb和spring整合的project
与SQL对照的操作
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import com.mongodb.AggregationOutput;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBObject;
@Service
public class NetflowDao {
@Autowired
MongoTemplate mongoTemplate;
public static void main(String[] args) {
// 假设表中列有 _id name age score
Map matchMap = new HashMap();
//where 条件 年龄大于12
matchMap.put("age", new BasicDBObject("$gt", 12));
Map groupMap = new HashMap();
groupMap.put("name","$name");
groupMap.put("age","$age");
BasicDBObject Basicgroup= new BasicDBObject();
//分组条件
Basicgroup.put("_id", groupMap);
//计算总分
Basicgroup.put("totalscore", new BasicDBObject("$sum", "$score"));
BasicDBObject group=new BasicDBObject("$group", Basicgroup);
//分页条件 每次查询返回条数
BasicDBObject groupOptlimit = new BasicDBObject();
groupOptlimit.put("$limit", 10);
//从多少条开始查询
BasicDBObject groupOptskip = new BasicDBObject();
groupOptskip.put("$skip", 0);
BasicDBObject orderbyOpt = new BasicDBObject();
//设置总分排序 正序1 倒序-1
orderbyOpt.append("$sort", new BasicDBObject("totalscore",1));
AggregationOutput aggrResult= mongoTemplate.getCollection("shopnetflowday").aggregate( matchMap,group,orderbyOpt,groupOptskip,groupOptlimit);
Iterator<DBObject> iter = aggrResult.results().iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}