//list用于$or的查询条件
ArrayList<DBObject> list = new ArrayList<DBObject>();
BasicDBObject or = new BasicDBObject();
or.put("date", new BasicDBObject("$gte", 1412092800000L).append("$lte", 1412611200000L));
list.add(or);
or.put("date", new BasicDBObject("$gte", 1393603200000L).append("$lte", 1398787200000L));
list.add(or);
DBObject match = new BasicDBObject();
match.put("$match",new BasicDBObject("roomTypeId",roomTypeId).append("$or", list));
DBObject groupOpt = new BasicDBObject();
// 对分组字段统计行数且分组统计字段默认为返回结果集合
DBObject groupFields = new BasicDBObject("_id", "$rateCode");
groupFields.put("rateCode", new BasicDBObject("$min", "$rateCode"));
groupFields.put("avgOrgin", new BasicDBObject("$avg", "$orginPrice"));
groupFields.put("avgPrice", new BasicDBObject("$avg", "$price"));
groupFields.put("avgCost", new BasicDBObject("$avg", "$cost"));
groupOpt.put("$group", groupFields);
//设置显示的字段集合
DBObject fields = new BasicDBObject("rateCode", 1);
fields.put("orginPrice", 1);
fields.put("cost", 1);
fields.put("rateCode",1);
DBObject project = new BasicDBObject("$project", fields);
AggregationOutput aggrResult = MongoDB.getMongoDB().getCollection("Price").aggregate(match,project,groupOpt);
Iterator<DBObject> iter = aggrResult.results().iterator();
while (iter.hasNext()) {
DBObject obj = (DBObject) iter.next();
String rateCode =obj.get("rateCode").toString();
int orginPrice = (int) Double.parseDouble(obj.get(
"avgOrgin").toString());
int cost = (int) Double.parseDouble(obj.get(
"avgCost").toString());
map.put(rateCode, orginPrice + "/" + cost);
}