zoukankan      html  css  js  c++  java
  • java mongodb group后count,再排序

    方式1:

    Criteria criteria = new Criteria();
            criteria.andOperator(
                    Criteria.where("msgTimestamp").gte(beginTime), Criteria.where("msgTimestamp").lte(endTime)
            );
            criteria.and("convType").is(ConvTypeEnum.PERSON.toString());
            if (StringUtils.isNotEmpty(fromAccount)) {
                criteria.and("fromAccount").is(Constants.TJK_PREFIX + fromAccount);
            }
            Sort sort0 = new Sort(Sort.Direction.DESC,"_id");
    
            Aggregation aggregation = Aggregation.newAggregation(
                    Aggregation.match(criteria),
                    Aggregation.group("relationId").count().as("ccc"),
                    Aggregation.sort(sort0), Aggregation.limit(10000));
            List<DBObject> pvs =this.mongoTemplate().aggregate(aggregation, Constants.SINGLE_MSG_COLLECTION, DBObject.class).getMappedResults();

    由于  db.teamTalkSingleMsg.aggregate([{$group : {_id : "$relationId", ccc : {$sum : 1}}}])这一行的“_id”不能写成其他的,所以排序也只能用_id来接

    方式2:

    //group
            DBObject groupFields = new BasicDBObject( "_id", "$relationId");
            groupFields.put("count", new BasicDBObject( "$sum", 1));
            DBObject group = new BasicDBObject("$group", groupFields);
    
    //where条件
            DBObject condition1 = new BasicDBObject();
            condition1.put("convType", ConvTypeEnum.PERSON.toString());
            condition1.put("msgTimestamp", new BasicDBObject("$gte", beginTime).append("$lte", endTime));
            DBObject match = new BasicDBObject("$match", condition1); //$match相当于where
    
    //排序
            DBObject sortFields = new BasicDBObject("_id", 1);
    // 注意此处排序是按照字段day升序,但是不能写day 需用_id代替,因为day是group用的字段
            DBObject sort = new BasicDBObject("$sort", sortFields);
    
            List<DBObject> optionList = new ArrayList<>();
            optionList.add(match);
            optionList.add(group);
            optionList.add(sort);
    //optionList中的顺序很重要,不是随便往list里面加的,否则是不正确的,添加的顺序也是参照上面网址里面的内容
            AggregationOutput output = this.mongoTemplate().getCollection(Constants.SINGLE_MSG_COLLECTION).aggregate(optionList);
  • 相关阅读:
    JAVAEE网上商城项目总结
    色盲小游戏
    jQuery(动画效果)
    Oracle exp,imp,expdp,impdp数据导入导出
    Sysbench压力测试工具简介和使用(二)
    Sysbench压力测试工具简介和使用(一)
    Eclipse常用快捷键汇总
    常用数据库连接URL地址大全
    H2数据库使用
    DbVisualizer 解决中文乱码问题
  • 原文地址:https://www.cnblogs.com/xiaoliu66007/p/14119994.html
Copyright © 2011-2022 走看看