SpringBoot中的MongoTemplate的各种条件查询示例详解

 更新时间:2024年01月05日 14:43:00   作者:kenhins  
这篇文章主要介绍了SpringBoot中的MongoTemplate的各种条件查询示例详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友参考下吧

SpringBoot之MongoTemplate的各种条件查询 (嵌套对象查询)

    /**
     * 指定field查询
     */
    public void specialFieldQuery() {
        Query query = new Query(Criteria.where("user").is("用户名blog"));
        // 查询一条满足条件的数据
        Map result = mongoTemplate.findOne(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | specialFieldQueryOne: " + result);

        // 满足所有条件的数据
        List<Map> ans = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | specialFieldQueryAll: " + ans);
    }

    /**
     * 多个查询条件同时满足
     */
    public void andQuery() {
        Query query = new Query(Criteria.where("user").is("用户名blog").and("age").is(18));
        Map result = mongoTemplate.findOne(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | andQuery: " + result);
    }

    /**
     * 或查询
     */
    public void orQuery() {
        // 等同于 db.getCollection('demo').find({"user": "用户名blog", $or: [{ "age": 18}, { "sign": {$exists: true}}]})
        Query query = new Query(Criteria.where("user").is("用户名blog")
                .orOperator(Criteria.where("age").is(18), Criteria.where("sign").exists(true)));
        List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | orQuery: " + result);

        // 单独的or查询
        // 等同于Query: { "$or" : [{ "age" : 18 }, { "sign" : { "$exists" : true } }] }, Fields: { }, Sort: { }
        query = new Query(new Criteria().orOperator(Criteria.where("age").is(18), Criteria.where("sign").exists(true)));
        result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | orQuery: " + result);
    }

    /**
     * in查询
     */
    public void inQuery() {
        // 相当于:
        Query query = new Query(Criteria.where("age").in(Arrays.asList(18, 20, 30)));
        List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | inQuery: " + result);
    }

    /**
     * 数字类型,比较查询 >
     */
    public void compareBigQuery() {
        // age > 18
        Query query = new Query(Criteria.where("age").gt(18));
        List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | compareBigQuery: " + result);

        // age >= 18
        query = new Query(Criteria.where("age").gte(18));
        result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | compareBigQuery: " + result);
    }

    /**
     * 数字类型,比较查询 <
     */
    public void compareSmallQuery() {
        // age < 20
        Query query = new Query(Criteria.where("age").lt(20));
        List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | compareSmallQuery: " + result);

        // age <= 20
        query = new Query(Criteria.where("age").lte(20));
        result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | compareSmallQuery: " + result);
    }


    /**
     * 正则查询
     */
    public void regexQuery() {
        Query query = new Query(Criteria.where("user").regex("^用户名blog"));
        List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | regexQuery: " + result);
    }

    /**
     * 查询总数
     */
    public void countQuery() {
        Query query = new Query(Criteria.where("user").is("用户名blog"));
        long cnt = mongoTemplate.count(query, COLLECTION_NAME);
        System.out.println("query: " + query + " | cnt " + cnt);
    }

    /**
     * 查询总数
     */
    public void countQuery() {
        Query query = new Query(Criteria.where("user").is("用户名blog"));
        long cnt = mongoTemplate.count(query, COLLECTION_NAME);
        System.out.println("query: " + query + " | cnt " + cnt);
    }


    /**
     * 排序查询
     */
    public void sortQuery() {
        // sort查询条件,需要用with来衔接
        Query query = Query.query(Criteria.where("user").is("用户名blog")).with(Sort.by("age"));
        List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | sortQuery " + result);
    }

    /**
     * 分页查询
     */
    public void pageQuery() {
        // limit限定查询2条
        Query query = Query.query(Criteria.where("user").is("用户名blog")).with(Sort.by("age")).limit(2);
        List<Map> result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | limitPageQuery " + result);


        // skip()方法来跳过指定数量的数据
        query = Query.query(Criteria.where("user").is("用户名blog")).with(Sort.by("age")).skip(2);
        result = mongoTemplate.find(query, Map.class, COLLECTION_NAME);
        System.out.println("query: " + query + " | skipPageQuery " + result);
    }

mongodbTemplate 查询嵌套对象(嵌套对象属性为条件)

    @ApiOperation("测试查询")
    @PostMapping("/getTestList")
    public Response<IPage<TicketResp>> getTestList(TicketVo ticket,
                                                     @RequestParam(required = false) Integer pageNum,
                                                     @RequestParam(required = false) Integer pageSize) {
        if(null == pageNum || null == pageSize){
            pageNum = 1;pageSize = 10;
        }
        IPage<TicketResp> page = new Page<>(pageNum,pageSize);
        page = ticketService.getMyTicketList(page,ticket);
        //return Response.ok(page);
//        Criteria criteria = Criteria.where("_id").is(ticket.getTicketKey())
//                .and("ticketContent.createUser").is("110201010");
        Criteria criteria = Criteria.where("ticketContent.createUser").is("110201010");
        Query query = new Query(criteria);
        List<TicketInfo> objList = mongoTemplate.find(query, TicketInfo.class);
        return Response.ok(objList);
//        History history = null;
//        //封装对象列表查询条件
//        List<AggregationOperation> commonOperations = new ArrayList<>();
//        //1. 指定查询主文档
//        MatchOperation match = Aggregation.match(Criteria.where("userId").is("2"));
//        commonOperations.add(match);
//        //2. 指定投影,返回哪些字段
//        ProjectionOperation project = Aggregation.project("historyList");
//        commonOperations.add(project);
//        //3. 拆分内嵌文档
//        UnwindOperation unwind = Aggregation.unwind("historyList");
//        commonOperations.add(unwind);
//        //4. 指定查询子文档
//        MatchOperation match2 = Aggregation.match(
//                Criteria.where("historyList.hh").is("2"));
//        commonOperations.add(match2);
//
//        //创建管道查询对象
//        Aggregation aggregation = Aggregation.newAggregation(commonOperations);
//        AggregationResults<JSONObject> reminds = mongoTemplate
//                .aggregate(aggregation, "history", JSONObject.class);
//        List<JSONObject> mappedResults = reminds.getMappedResults();
//        if (mappedResults != null && mappedResults.size() > 0) {
//            history = JSONObject
//                    .parseObject(mappedResults.get(0).getJSONObject("historyList").toJSONString(), History.class);
//        }
    }

到此这篇关于SpringBoot中的MongoTemplate的各种条件查询的文章就介绍到这了,更多相关SpringBoot MongoTemplate条件查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解java安全编码指南之可见性和原子性

    详解java安全编码指南之可见性和原子性

    java类中会定义很多变量,有类变量也有实例变量,这些变量在访问的过程中,会遇到一些可见性和原子性的问题。这里我们来详细了解一下怎么避免这些问题。
    2021-06-06
  • SpringBoot中各个层级结构的具体实现

    SpringBoot中各个层级结构的具体实现

    在SpringBoot项目中,常常会把代码文件放入不同的包中,本文主要介绍了SpringBoot中各个层级结构的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • SpringBoot项目中java -jar xxx.jar没有主清单属性的解决方法

    SpringBoot项目中java -jar xxx.jar没有主清单属性的解决方法

    这篇文章主要给大家介绍了SpringBoot项目中java -jar xxx.jar没有主清单的解决方法,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • JAVA截取字符串的几种常用方法

    JAVA截取字符串的几种常用方法

    这篇文章主要给大家介绍了关于JAVA截取字符串的几种常用方法, 在处理字符串的过程中有很多情况下会遇到需要截取字符串的情况,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • java追加写入txt文件的方法总结

    java追加写入txt文件的方法总结

    在本篇文章里我们给大家整理了关于java如何追加写入txt文件的方法和代码,需要的朋友们可以参考下。
    2020-02-02
  • Springboot处理CORS跨域请求的三种方法

    Springboot处理CORS跨域请求的三种方法

    这篇文章主要介绍了Springboot处理CORS跨域请求的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • java爱心代码完整示例(脱单必备)

    java爱心代码完整示例(脱单必备)

    最近看到个好玩的,就是用代码实现爱心的形状,对于不懂编程的人来说,这是一个很好的玩的东西,这篇文章主要给大家介绍了关于java爱心代码的相关资料,需要的朋友可以参考下
    2023-07-07
  • shiro 与 SpringMVC的整合完美示例

    shiro 与 SpringMVC的整合完美示例

    shiro可以直接和spring整合,但是这样需要单独配置spring用于整合shiro,在配置springmvc,接下来通过实例代码给大家介绍shiro 整合 SpringMVC 的方法,感兴趣的朋友一起看看吧
    2021-08-08
  • Java通过Modbus简单实现数采的示例代码

    Java通过Modbus简单实现数采的示例代码

    本文介绍了Java通过Modbus简单实现数采,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • javaWeb使用验证码实现简单登录

    javaWeb使用验证码实现简单登录

    这篇文章主要为大家详细介绍了javaWeb使用验证码实现简单登录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08

最新评论