<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    在SPRING DATA MONGODB中使用聚合統計查詢

    在SQL語句中如要做統計一般是這種方式:
    SELECT ..,SUM(1)
    FROM ..
    WHERE ..
    GROUP BY ..
    HAVING ..
    SORT ..


    在MONGODB中的架構圖



    在SPRING DATA MONGODB中是這樣寫的:
    public class VideoRepositoryImpl implements VideoRepositoryCustom{
        
        private static Logger logger = LoggerFactory.getLogger(VideoRepositoryImpl.class);
        
        @Autowired
        private MongoTemplate mongoTemplate;
        

        public List<Cat1UpdateCount> getVideoWithUpdateFrag(List<String> importantCat1List) {
            
            logger.info(new Date().toString());
            
            /**
             * db.videos.aggregate(
                [
                   { $match: { "frags.isnew" : true } },
                   { $unwind: "$frags" },
                   { $match: { "frags.isnew" : true } },
                   { $group: { 
                               _id: {cat1:"$cat1"},
                               count: { $sum: 1 },
                               publishdate2: { $max: "$publishdate"}
                             }
                   }
                   
                ]
                )
             
    */
            Aggregation agg = newAggregation(
                    project("frags","cat1","publishdate"),//挑選所需的字段
                    match(
                            Criteria.where("frags.isnew").is(Boolean.TRUE)
                            .and("cat1").in(importantCat1List)
                         ),//篩選符合條件的記錄
                    unwind("frags"),//如果有MASTER-ITEM關系的表,需同時JOIN這兩張表的,展開子項LIST,且是內鏈接,即如果父和子的關聯ID沒有的就不會輸出
                    match(Criteria.where("frags.isnew").is(Boolean.TRUE)),
                    group("cat1")//設置分組字段
                        .count().as("updateCount")//增加COUNT為分組后輸出的字段
                        .last("publishdate").as("publishDate"),//增加publishDate為分組后輸出的字段
                    project("publishDate","cat1","updateCount")//重新挑選字段
                        .and("cat1").previousOperation()//為前一操作所產生的ID FIELD建立別名
                );

                AggregationResults<Cat1UpdateCount> results = mongoTemplate.aggregate(agg, Video.COLLECTION_NAME, Cat1UpdateCount.class);
                List<Cat1UpdateCount> cat1UpdateCountList = results.getMappedResults();
            
            return cat1UpdateCountList;
        }

    }

    其中frags的數據類型是LIST

    Cat1UpdateCount.java
    import java.io.Serializable;

    public class Cat1UpdateCount implements Serializable{

        private static final long serialVersionUID = 4240876746984930098L;
        
        private String cat1;
        
        private int updateCount;
        
        private String publishDate;

        public String getCat1() {
            return cat1;
        }

        public void setCat1(String cat1) {
            this.cat1 = cat1;
        }

        public int getUpdateCount() {
            return updateCount;
        }

        public void setUpdateCount(int updateCount) {
            this.updateCount = updateCount;
        }

        public String getPublishDate() {
            return publishDate;
        }

        public void setPublishDate(String publishDate) {
            this.publishDate = publishDate;
        }

        public String toString() {
            return "Cat1UpdateCount [cat1=" + cat1 + ", updateCount=" + updateCount
                    + ", publishDate=" + publishDate + "]";
        }

    }

    參考:
    http://docs.spring.io/spring-data/data-mongodb/docs/current/reference/htmlsingle/#mongo.group

    http://docs.mongodb.org/manual/reference/operator/aggregation/group/
    http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/

    posted on 2013-12-24 09:44 paulwong 閱讀(11657) 評論(0)  編輯  收藏 所屬分類: SPRINGMONGODB

    主站蜘蛛池模板: 亚洲精品国产精品国自产网站 | 亚洲一区精品无码| 亚洲人成网站在线在线观看| h视频在线免费看| 亚洲一区二区三区久久| 青青草a免费线观a| 亚洲成人福利网站| 免费毛片a在线观看67194| 亚洲免费在线观看视频| 成全高清视频免费观看| 亚洲成在人线在线播放无码| 成人网站免费观看| 婷婷亚洲综合五月天小说在线| 国产成人综合久久精品免费| 日本特黄特色AAA大片免费| 亚洲美日韩Av中文字幕无码久久久妻妇| 特级做a爰片毛片免费看| 在线亚洲97se亚洲综合在线| 国产日韩一区二区三免费高清| 综合自拍亚洲综合图不卡区| 国产精品美女午夜爽爽爽免费| 亚洲AV成人无码网站| 亚洲欧洲中文日韩久久AV乱码| 女同免费毛片在线播放| 亚洲视频在线观看不卡| 成全视频在线观看免费高清动漫视频下载 | 狠狠亚洲狠狠欧洲2019| 一级毛片在线观看免费| 国产精品亚洲午夜一区二区三区| 国产资源免费观看| a级片免费观看视频| 国产成人亚洲综合网站不卡| 亚洲AV之男人的天堂| 最近中文字幕mv免费高清在线| 亚洲中文字幕无码中文字| 国产精品亚洲视频| 成年人免费的视频| 一级午夜免费视频| 亚洲国产成人资源在线软件| 免费一级特黄特色大片在线观看| 久久精品国产免费一区|