美文网首页
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