springboot使用MongoTemplate分組統計數據

根據messageStatus字段分組統計不同狀態的數據量,相當於mysql裏的group by 關鍵字。

使用mongo裏的aggregation聚合關鍵字。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author DAI
 * @date 2020/5/30 19:08
 * @Description TODO
 */
@Service
public class MessageReceiveLogDaoImpl implements MessageReceiveLogDao {

    @Autowired
    MongoTemplate mongoTemplate;

    @Override
    public List<MessageCount> countByMessageStatus() {
        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.group("messageStatus").count().as("count"),
                Aggregation.project("count").and("messageStatus").previousOperation()
        );
        AggregationResults<MessageCount> outputTypeCount = mongoTemplate.aggregate(aggregation, MessageReceiveLog.class, MessageCount.class);
        return outputTypeCount.getMappedResults();
    }
}

結果集類

import lombok.Data;

/**
 * @author DAI
 * @date 2020/6/1 11:56
 * @Description 分組求和
 */
@Data
public class MessageCount {

    String messageStatus;

    Long count;
}

前端返回結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章