美文网首页
SpringBoot连接MongoDB(单节点)

SpringBoot连接MongoDB(单节点)

作者: 丿捺人生 | 来源:发表于2019-04-10 14:59 被阅读0次

    pom.xml(SpringBoot版本1.5.9)

            <!-- 集成mongodb -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
    

    配置文件

    #mongodb配置
    spring:
      data:
        mongodb:
          host: ip
          port: port
          database: ismart
    

    分页查询

        @Autowired
        private MongoTemplate mongoTemplate;
    
        public void demo01() {
            Criteria c = new Criteria();
            if (params != null && params.size() > 0) {
                for (Map.Entry<String, Object> entry : params.entrySet()) {
                    c.and(entry.getKey()).is(entry.getValue());
                }
            }
            /**
             * (num-1) * pageSize
             * 1 10 0 10
             * 2 10 10 10
             * 3 10 20 10
             */
            if (pageNum == null) {
                pageNum = 1;
            }
            if (pageSize == null) {
                pageSize = 10;
            }
            List<ReadingHistory> data = mongoTemplate.find(Query.query(c)
                            .with(new Sort(Sort.Direction.DESC, "mdbCreatedAt")) // 排序
                            .skip((pageNum - 1) * pageSize) //当前页
                            .limit(pageSize), // 每页条数
                    ReadingHistory.class, "collectionHistory");
        }
    

    聚合查询-根据时间分组、排序

        数据结构如下图

    image.png
      public void count() {
            // 根据部门和时间统计上传图片数量,时间倒序
            Aggregation agg = Aggregation.newAggregation(
    //                Aggregation.match(Criteria.where("moduleId").is("ismart")),
                    Aggregation.project("moduleId")
                            .and(DateOperators.DateToString.dateOf("createTime")
                                    .toString("%Y-%m-%d")).as("date"),
                    Aggregation.group("date","moduleId").count().as("total"),
                    Aggregation.sort(Sort.Direction.DESC, "date","moduleId")
            );
    
            // 输出数据
            AggregationResults<JSONObject> a = mongoTemplate.aggregate(agg, "fastdfs", JSONObject.class);
            System.out.println(a);
            List<JSONObject> list = a.getMappedResults();
            for (JSONObject count : list) {
                System.out.println(count.toString());
            }
        }
          输出结果如下:
          {"date":"2019-04-11","total":2,"moduleId":"ismart"}
          {"date":"2019-04-11","total":750,"moduleId":"industrial"}
          {"date":"2019-04-10","total":1239,"moduleId":"ismart"}
          {"date":"2019-04-10","total":973,"moduleId":"industrial"}
          {"date":"2019-04-08","total":1367,"moduleId":"ismart"}
          {"date":"2019-04-08","total":2080,"moduleId":"industrial"}
          ...
    
    image.png
    • 需注意SpringBoot版本问题。使用1.5.9.RELEASE版本聚合查询一直报错(如上图),解决方案:升级SpringBoot版本至1.5.10.RELEASE

    聚合语法参考:

    SQL 操作/函数 mongodb聚合操作
    where $match
    group by $group
    having $match
    select $project
    order by $sort
    limit $limit
    sum() $sum
    count() $sum
    join $lookup(v3.2 新增)

    借鉴文章如下:
    mongodb高级聚合查询

    相关文章

      网友评论

          本文标题:SpringBoot连接MongoDB(单节点)

          本文链接:https://www.haomeiwen.com/subject/suwniqtx.html