java對MongoDB的聚合操作(BasicDBObject)
阿新 • • 發佈:2019-02-01
//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); }