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程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。本文将通过示例详细说说Java中数据类型的转换,感兴趣的可以了解一下
    2022-10-10
  • Java多文件生成并压缩下载功能(思路详解)

    Java多文件生成并压缩下载功能(思路详解)

    这篇文章主要介绍了Java多文件生成并压缩下载,本文给大家分享两种思路通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Java中的循环笔记整理(必看篇)

    Java中的循环笔记整理(必看篇)

    下面小编就为大家带来一篇Java中的循环笔记整理(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • JAVA对字符串进行32位MD5加密的实践

    JAVA对字符串进行32位MD5加密的实践

    本文主要介绍了JAVA对字符串进行32位MD5加密的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 超全面的SpringBoot面试题含答案

    超全面的SpringBoot面试题含答案

    这篇文章主要收录了44道面试中经常被问的SpringBoot问题,不管你是正在求职的新手还是已经工作很久的高手,这篇关于SpringBoot的面试题总结一定会让你有新的理解,让我们一起来看看吧
    2023-03-03
  • javaSE基础如何通俗的理解javaBean是什么

    javaSE基础如何通俗的理解javaBean是什么

    所谓的Java Bean,就是一个java类,编译后成为了一个后缀名是 .class的文件。这就是Java Bean,很多初学者,包括当年的我自己,总是被这些专有名词搞的晕头转向
    2021-10-10
  • Java流程控制语句最全汇总(下篇)

    Java流程控制语句最全汇总(下篇)

    这篇文章主要介绍了Java流程控制语句最全汇总(下篇),本文章内容详细,通过案例可以更好的理解数组的相关知识,本模块分为了三部分,本次为下篇,需要的朋友可以参考下
    2023-01-01
  • SpringBoot整合RabbitMQ处理死信队列和延迟队列

    SpringBoot整合RabbitMQ处理死信队列和延迟队列

    这篇文章将通过示例为大家详细介绍SpringBoot整合RabbitMQ时如何处理死信队列和延迟队列,文中的示例代码讲解详细,需要的可以参考一下
    2022-05-05
  • Java Web关键字填空示例详解

    Java Web关键字填空示例详解

    最近在工作中使用了java web,发现有些难度,下面这篇文章主要给大家介绍了关于Java Web关键字填空的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 实例讲解Java中random.nextInt()与Math.random()的基础用法

    实例讲解Java中random.nextInt()与Math.random()的基础用法

    今天小编就为大家分享一篇关于实例讲解Java中random.nextInt()与Math.random()的基础用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论