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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM