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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值