mongo与Java之aggregate

使用aggregate实现分组功能:
–脚本

db.wx_local_group_count_day.aggregate(
{"$match":{"_id.name":{$in:["坂田", "南湾", "平湖", "龙岗", "横岗", "龙城", "坪地", "布吉"]},
            "_id.updateTime":{$gte:"2015-06-01",$lte:"2015-06-10 23:59:59"}
          }
    },
{"$group":{
    "_id":"$_id.updateTime",
    "fssum":{"$sum":"$value.fssum"},
    "xzsum":{"$sum":"$value.xzsum"},
    "bdfssum":{"$sum":"$value.bindsum"}
    }
},
{"$sort":{"_id":-1}}
    );

$match—是查询条件
$group—分组内容 其中的Key “_id”是必须的.

Java实现 上述脚本

/**
     *  拼接日期查询格式
     * */
    public DBObject  searchTime(String startTime,String endTime){
        DBObject timeC = new BasicDBObject();
        if (StringHelper.isNotNull(startTime)) {
            startTime = startTime;
            timeC.put("$gte", startTime);
        }
        if (StringHelper.isNotNull(endTime)) {
            endTime = endTime + " " + "23:59:59";
            timeC.put("$lte", endTime);
        }
        return timeC;
    }

    DBObject  timeC = searchTime("2015-06-01","2015-06-10");
    List<String> zxs = Arrays.asList(new String[]{"坂田","南湾"...});

    String gsmc = "";


    //aggregate实现分组加排序 
    public List<Map> dayGroup(DBObject timeC,List zxs,String gsmc){
        List list = new ArrayList();
        BasicDBObject in = new BasicDBObject();  //查询条件
        in.append("_id.name", new BasicDBObject("$in", zxs));
        in.append("_id.updateTime", timeC);
        BasicDBObject math = new BasicDBObject();
        math.append("$match",in);

        BasicDBObject groupby = new BasicDBObject();//分组统计
        groupby.append("_id", "$_id.updateTime");
        groupby.append("fssum", new BasicDBObject("$sum", "$value.fssum"));
        groupby.append("xzsum", new BasicDBObject("$sum", "$value.xzsum"));
        groupby.append("bdfssum", new BasicDBObject("$sum", "$value.bindsum"));

        BasicDBObject group = new BasicDBObject();
        group.append("$group", groupby);


        BasicDBObject sort = new BasicDBObject();
        sort.append("$sort", new BasicDBObject("_id", -1));  //按updateTime倒序排
        DBObject obj = (DBObject) groupCountDayDao.groupByAggregate(math, group, sort);

        JSONArray jsonarr = JSONArray.fromObject(obj);//  必须转成JSONArray, 转JSONObject会报错.
        for(int i = 0;i<jsonarr.size();i++){
            JSONObject json = (JSONObject) jsonarr.get(i);
            Map map = new HashMap();
            map.put("updateTime", json.getString("_id"));
            map.put("fssum", json.getInt("fssum"));
            map.put("xzsum", json.getInt("xzsum"));
            map.put("bdfssum", json.getInt("bdfssum"));
            map.put("gsmc",gsmc);
            list.add(map);  
        }

        return list;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值