1. 程式人生 > >java對MongoDB的聚合操作(BasicDBObject)

java對MongoDB的聚合操作(BasicDBObject)

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