Java中怎么实现一个Group功能
admin
2023-04-13 20:21:22
0

接口方法如下:

/**
     * keyColumn : new String[]{"xxxName","xxxType"} 
     * condition : 查询条件 ,可为空
     * initial : 分组统计初始变量,为空时自动为每列提供初始变量
     * reduce : 记录处理function
     * finalize : finalize函数,可为空 
     */     public BasicDBList group(String[] keyColumn, DBObject condition,             DBObject initial, String reduce, String finalize) {         DBCollection coll = getCollection();         DBObject key = new BasicDBObject();         for (int i = 0; i < keyColumn.length; i++) {             key.put(keyColumn[i], true);         }         condition = (condition == null) ? new BasicDBObject() : condition;         if (StringUtils.isEmpty(finalize)) {             finalize = null;         }         if (initial == null) {      //定义一些初始变量             initial = new BasicDBObject();             for (int i = 0; i < keyColumn.length; i++) {                 DBObject index = new BasicDBObject();                 index.put("count", 0);                 index.put("sum", 0);                 index.put("max", 0);                 index.put("min", 0);                 index.put("avg", 0);                 index.put("self", "");                 initial.put(keyColumn[i], index);             }         }         BasicDBList resultList = (BasicDBList) coll.group(key, condition,                 initial, reduce, finalize);         return resultList;     }

实现案例:

//任务统计
    @Action(value = "getTaskStatistic", results = { @Result(name = "success", type = "json", params = {
            "includeProperties", "jsonResult" }) })
    public String getTaskStatistic() {
        DBObject initial = new BasicDBObject();
        DBObject index = new BasicDBObject();
        index.put("count", 0);
        index.put("taskStatus", "");
        initial.put("taskStatus", index);
                     
        String reduce = "function (doc, out) { "
                    + " out.taskStatus.count = out.taskStatus.count+=1; "
                    + " out.taskStatus.inspectStatus = doc.taskStatus;"
                + "}";
        BasicDBList group = (BasicDBList) taskStatusService.group(new String[] { "taskStatus"}, null, initial, reduce, null);
                     
        this.jsonResult = group.toString();
        return SUCCESS;
    }

返回数据:

[ { "taskStatus" : { "count" : 4.0 , "taskStatus" : "Finished"}} , { "taskStatus" : { "count" : 3.0 , "taskStatus" : "Received"}} , { "taskStatus" : { "count" : 2.0 , "taskStatus" : "UnReceive"}}]

相关内容

热门资讯

特朗普访华在即,随行商界大咖都... 美国总统特朗普将于5月13日至15日对中国进行国事访问。这是中美两国元首继去年10月釜山之后再次面对...
有线电视机顶盒安装问题求安装方... 有线电视安装说明: 一、将白色有线电视线一端连接有线电视终端盒另一端连接机顶盒后的射频输入口。 ...
60寸电视机尺寸画面长宽是多少...   60寸的液晶电视,60寸就是指电视屏幕对角线长度,因为长宽比有两种情况,经过寸转化为厘米计算之后...
长城电视机尺寸测量方法 长城电视机的尺寸测量方法与其他品牌的电视机测量方法基本相同。需要准备的工具有卷尺或直尺等测量工具,以...
伊朗学者:美伊能否达成协议,取... 伊朗5月10日就美国最新停战方案提交响应后,美国总统特朗普当天发文指出,伊方的响应“完全不可接受”。...
50英寸电视机尺寸是多少厘米 50 英寸电视机的尺寸通常是指屏幕对角线的长度,1 英寸约等于 2.54 厘米,因此 50 英寸电视...
演员张凌赫成上市公司第六大股东... 【大河财立方消息】 5月12日,节能风电在互动平台回应近期传言:关于近期网络流传的“公司股东张家玮先...
3D电视怎么样 最佳回答 你好这位网友,现在的很多电视机都是带3d功能的,只不过这种功能是需要通过特殊的VR眼镜才能...
三年行动计划公布!全面提升周口... 【大河财立方消息】 近日,河南省人民政府印发《河南周口国家农业高新技术产业示范区高质量发展三年行动计...
员工用企业账号向顾客发送“有偿... “5000陪我一晚上有时间吗?”近日,贵阳一沪上阿姨门店的企业成员账号给顾客发送“有偿陪睡”信息一事...