java对MongoDB的聚合操作(BasicDBObject)

来源:互联网 发布:php前景怎么样 编辑:程序博客网 时间:2024/05/22 10:35

//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);}

0 0
原创粉丝点击