美文网首页
MongoDB操作大全汇总集成配置精确模糊范围分页查询排序

MongoDB操作大全汇总集成配置精确模糊范围分页查询排序

作者: 一个忙来无聊的人 | 来源:发表于2019-11-13 17:52 被阅读0次

    使用简介:
    1、MongoDB不支持事务
    2、复杂查询sql较多尽量不用MongoDB
    3、MongoDB插入时不需要建表,数据库会根据类进行表建立 同时表字段新增无需手动更改表结构;
    4、MongoDB用于保存数据量较大数据如监控数据

    1、项目集成

    1.1 、pom文件中引入mongo配置信息

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

    1.2 、配置文件中新增mongo的配置文件
    无密码配置 ip :127.0.0.1: 端口 27000 数据库名称 test_demo
    application.properties配置文件如下
    spring.data.mongodb.uri=mongodb://127.0.0.1:27000/test_demo?maxPoolSize=256
    yml 配置如下

    spring:
      data:
        mongodb:
          uri: mongodb://127.0.0.1:27000/test_demo?maxPoolSize=256
    

    2、查询 包含如下功能点

    2.1、模糊查询功能
    2.2、分页查询功能
    2.3、查询数量
    2.4、范围查询
    2.5、排序查询
    具体代码及注释如下

    package com.example.demo.controller;
    
    import org.apache.commons.lang.StringUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Sort;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /**
     * mongo测试类
     */
    @RestController
    public class MongoTestController {
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
        @RequestMapping
        public MongoResponse queryList(@RequestBody MongoRequest request) {
            MongoResponse response = new MongoResponse();
            Query query = getQuery(request);
            // 查询数量需要过滤分页参数信息
            long count = mongoTemplate.count(query, MongoDemo.class);
            // 查询条件设置分页参数
            query.skip((request.getPageIndex() - 1) * request.getPageSize()).limit(request.getPageSize());
            // query:查询条件 MongoDemo:查询的表名,主要是根据实体类的名字来进行识别
            List<MongoDemo> mongoDemos = mongoTemplate.find(query, MongoDemo.class);
            response.setList(mongoDemos);
            response.setCount((int) count);
            return response;
        }
    
        private Query getQuery(MongoRequest request) {
            // 按照排序字段设置排序,
            Query query = new Query();
    
            // 单个字段排序
            // query.with(new Sort(Sort.Direction.ASC, request.getSortField()));
    
            //多个字段排序 排序类型 字段一  字段二
            if ("ASC".equals(request.getSortType())) {
                query.with(new Sort(Sort.Direction.ASC, request.getSortField(), "createDate"));
            } else {
                query.with(new Sort(Sort.Direction.DESC, request.getSortField(), "createDate"));
            }
    
            /**
             * 范围查询
             */
            if (null != request.getDates() && request.getDates().length == 2) {
                query.addCriteria(Criteria.where("changeDate").gte(request.getDates()[0]).lte(request.getDates()[1]));
            }
            /**
             * 名称模糊查找
             */
            if (StringUtils.isNotBlank(request.getName())) {
                query.addCriteria(Criteria.where("name").regex(".*?\\" + request.getName() + ".*"));
            }
    
            /**
             * 唯一编码精确查询
             */
            if (StringUtils.isNotBlank(request.getUniqueCode())) {
                query.addCriteria(Criteria.where("uniqueCode").is(request.getUniqueCode()));
            }
            return query;
        }
    
    }
    
    

    3、新增

    新增有两个方法 insert和save

          MongoDemo mongoDemo = new MongoDemo();
          mongoTemplate.insert(mongoDemo);
          mongoTemplate.save(mongoDemo);
    

    save方法有更新和插入两种功能
    insert: 若新增数据的主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常提示主键重复,不保存当前数据。
    save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。

    4、附录 附上上面代码中其他类信息

    package com.example.demo.controller;
    
    import lombok.Data;
    
    import java.util.Date;
    
    /**
     * @Desc: mongo保存数据库对象信息
     */
    @Data
    public class MongoDemo {
        // 名称
        private String name;
    
        // 唯一编码
        private String uniquerCode;
    
        // 创建时间
        private Date createDate;
    
        // 数据源时间信息
        private Date changeDate;
    
        //主键 可不传
        private String _id;
    }
    
    package com.example.demo.controller;
    
    import lombok.Data;
    
    import java.util.List;
    
    /**
     * @Desc: mongo返回对象信息
     */
    @Data
    public class MongoResponse {
        //数量
        private int count;
        //返回列表
        private List<MongoDemo> list;
        // 返回码
        private String code = "success";
    
        // 返回信息
        private String msg;
    
    }
    
    
    package com.example.demo.controller;
    
    import lombok.Data;
    
    import java.util.Date;
    
    /**
     * @Desc: mongo请求参数信息
     */
    @Data
    public class MongoRequest {
    
        /**
         * 示例用于模糊查找
         */
        private String name;
    
        /**
         * 示例用于精确查找
         */
        private String uniqueCode;
    
        /**
         * 示例用于时间范围查找
         */
        private Date[] dates;
    
        /**
         * 排序字段默认改变时间 只能是 MongoDemo 里面的某一个字段
         */
        private String sortField = "changeDate";
    
        /**
         * 排序类型 默认降序  只能是DESC 或者ASC
         */
        private String sortType = "DESC";
    
        /**
         * 页数 默认第一页
         */
        private Integer pageIndex = 1;
    
        /**
         * 每页数量
         */
        private Integer pageSize = 10;
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:MongoDB操作大全汇总集成配置精确模糊范围分页查询排序

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