博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB分页以及复杂条件查询例子
阅读量:7030 次
发布时间:2019-06-28

本文共 2541 字,大约阅读时间需要 8 分钟。

hot3.png

此处MongoDB的复杂的分页采用d调用MongoTemplate来实现

    springboot中application.yml 配置

    spring

      data:
        mongodb:
          uri: mongodb://username:password:port/database

    基本的查询可以通过 spring data jpa来实现,for example

        public interface TestDao extends MongoRepository<Test,String> {

        }

1.编写MongoDB分页查询工具类,查询总条数以及分页的方法

 /**
     * 查询总条数
     * operations
     * collectionName
     * clazz
     *
     */
    public long getTotalCount(List<AggregationOperation> operations,String collectionName,Class clazz){
        Aggregation aggregationCount = Aggregation.newAggregation(operations);
        List mappedResults = mongoTemplate.aggregate(aggregationCount, collectionName, clazz).getMappedResults();
        if(null == mappedResults){
            return 0;
        }else{
            return mappedResults.size();
        }
    }

    /**
     * collection的信息分页查询
     * @param page
     * @param pageSize
     * @param sorts
     * @param operations
     * @param collectionName
     * @param clazz
     * @return
     */
    public Page<T> getPageList(int page, int pageSize, Sort sorts, List<AggregationOperation> operations,
                    String collectionName, Class clazz){
        long totalCount = getTotalCount(operations,collectionName,clazz);
        operations.add(Aggregation.skip((long) (page-1) * pageSize));
        operations.add(Aggregation.limit(pageSize));
        Aggregation aggregation = Aggregation.newAggregation(operations);
        AggregationResults<FormControlsDTO> results = mongoTemplate.aggregate(aggregation,collectionName,clazz);
        Pageable pageable = PageRequest.of(page-1, pageSize, sorts);
        return new PageImpl(results.getMappedResults(), pageable, totalCount);
    }
    
    

2. 注入工具类,并使用聚合函数来添加设置查询条件

    

    Sort sorts = null;
    List<AggregationOperation> operations = new ArrayList<>();
    
    //设置排序
    sorts = new Sort(Sort.Direction.ASC,sort);
    operations.add(Aggregation.sort(Sort.Direction.ASC, sort));
            
    //精确匹配
    operations.add(Aggregation.match(Criteria.where("id").is(id)));
    
    //使用正则表达式模糊匹配
    Pattern pattern = Pattern.compile("^.*"+keyword+".*$", Pattern.CASE_INSENSITIVE);
    operations.add(Aggregation.match(Criteria.where(LpConstants.KEYWORD).regex(pattern)));

//and  or 组合 

Criteria criteria1 = new Criteria().orOperator(Criteria.where("a").regex(pattern),                Criteria.where("b").regex(pattern));Criteria c = new Criteria().andOperator(new Criteria().where("id").is(id),                criteria1);operations.add(Aggregation.match(c));

   

    //日期比较
    operations.add(Aggregation.match(Criteria.where("create_time").gte(format.parse(beginTime))));
    operations.add(Aggregation.match(Criteria.where("create_time").lte(format.parse(endTime))));

    Page<Test> page = mongoDao.getPageList(page,pageSize,sorts,operations,"collectionName",Test.class);

转载于:https://my.oschina.net/u/2329222/blog/2991676

你可能感兴趣的文章
[MetalKit]21-What's-new-in-graphics-and-games-at-WWDC-2016
查看>>
html2canvas在vue下的巨坑
查看>>
从设计师和开发的角度使用 lottie
查看>>
iOS之自定义tabBar
查看>>
Spring boot学习(三) Spring boot整合mybatis
查看>>
Redux 源码深度解析(附带视频1月14号上传)
查看>>
理解webpack原理,手写一个100行的webpack
查看>>
Node.js & Express 项目基本搭建
查看>>
掌握 MySQL 这 19 个骚操作,效率至少提高3倍
查看>>
【跃迁之路】【744天】程序员高效学习方法论探索系列(实验阶段501-2019.3.6)...
查看>>
用于大数据测试、学习的测试数据
查看>>
Software System Analysis and Design | 1
查看>>
JavaScript函数式编程,真香之组合(一)
查看>>
JavaScript链式调用实例浅析
查看>>
报表没完没了怎么办? | 润乾集算器提效报表开发
查看>>
记一次Hexo迁移
查看>>
RESTful API 中的 Status code 是否要遵守规范
查看>>
第十一天-《企业应用架构模式》-对象-关系行为模式
查看>>
[spring boot] jdbc
查看>>
新的开始!
查看>>