返回顶部
首页 > 资讯 > 后端开发 > Python >使用mongoTemplate实现多条件加分组查询方式
  • 391
分享到

使用mongoTemplate实现多条件加分组查询方式

2024-04-02 19:04:59 391人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录monGoTemplate实现多条件查询mongoTemplate分组查询的坑先来一个常见的错误信息: Due to limitations of the com.mongoDB

先来一个常见的错误信息:

Due to limitations of the com.mongoDB.BasicDocument, you can't add a second '$and' expression specified as '$and : 

错误原因:

在一个 Criteria 对象中调用了多次 andOperator() 方法

mongoTemplate实现多条件查询

多个条件的查询只需要创建 Query 对象,然后把需要添加的条件使用 Query 对象的 addCriteria() 方法

// 场景:查询指定时间段内,状态为1的数据
// 入参条件 :beginTime ,endTime ,statue
// mongodb字段:time , state
 
// 存放条件的对象
Query condition= new Query();
 
// 判断时间是否为空
if(beginTime != null && endTime != null){
    // 添加大于开始时间小于结束时间的条件
    condition.addCriteria(Criteria.where("time").gte(beginTime).lte(endTime));
}else{
    // 其中一个为空 分别进行判断
    if(beginTime != null){
        condition.addCriteria(Criteria.where("time").gte(beginTime));
    }
    if(endTime != null){
        condition.addCriteria(Criteria.where("time").lte(endTime));
    }
}
 
// 添加状态为1条件
if(statue!=null){
    condition.addCriteria(Criteria.where("state").is(statue));
}

条件有了后再调用 mongoTemplate.find(condition,返回类型.class,collectionName)

但是...想要分组,得调用 mongoTemplate.group(Criteria criteria , String inputCollectionName , GroupBy groupBy , Class<T> entityClass) 方法 (不是说只能这样才能分组,而是我通过这种方法实现了分组查询)

朋友们,第一个参数条件只能入参 Criteria 对象,而不能入参 Query 对象

结果我发现 Criteria 对象有 andOperator(Criteria ... criteria) 方法

这个方法就厉害了,可以入参数组,也就是说

我们可以把查询条件先存放到一个集合里面(因为数组需要定义长度,如果条件个数不确定,就不能直接定义数组),然后把集合放入数组中,再把数组入参 andOperator(Criteria ... criteria) 方法

// 场景:查询指定时间段内,状态为1的数据
// 入参条件 :beginTime ,endTime ,statue
// mongodb字段:time , state
 
// 定义一个存放条件的集合
List<Criteria> criteriaList = new ArrayList<>();
// 定义一个存放条件的数组(暂时不给长度)
Criteria[] criteriaArray = {};
 
// 判断时间是否为空
if(beginTime != null && endTime != null){
    // 添加大于开始时间小于结束时间的条件
    Criteria between = Criteria.where("time").gte(beginTime).lte(endTime);
    criteriaList.add(between);
}else{
    // 其中一个为空 分别进行判断
    if(beginTime != null){
        Criteria gte = Criteria.where("time").gte(beginTime);
        criteriaList.add(gte);
    }
    if(endTime != null){
        Criteria lte = Criteria.where("time").lte(endTime);
        criteriaList.add(lte);
    }
}
 
// 添加状态为1条件
if(statue!=null){
    Criteria isState = Criteria.where("state").is(statue);
    criteriaList.add(isState);
}
 
// 如果有条件
if(criteriaList.size()>0){
  // 集合的个数就是数组的长度
  criteriaArray = new Criteria[criteriaList.size()];
  // 遍历添加到数组中
  for(int i = 0 ; i<criteriaList.size(); i++){
      criteriaArray[i] = criteriaList.get(i);
   }
}
 

这种就可以调用 mongoTemplate.group(Criteria criteria , String inputCollectionName , GroupBy groupBy , Class<T> entityClass) 方法进行分组查询了

 GroupBy groupBy = new GroupBy("分组字段")
                    .initialDocument("{ count: 0 }")
                    .reduceFunction("function (doc,pre){pre.count +=1 ;}");
 
// new Criteria().andOperator(criteriaArray) 这个是很关键的一步操作,把刚刚的条件数组放入进入
// groupByResults 这个对象里面内容很多,有兴趣的朋友可以断点进入看一下
GroupByResults groupByResults = mongoTemplate.
                    group(new Criteria().andOperator(criteriaArray), mongodb的collectionName, groupBy, 实体类.class);
// 获取分组后的数量
long resultCount = ((List)groupByResults.getRawResults().get("retval")).size();

mongoTemplate分组查询的坑

Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(new Criteria().orOperator(new Criteria("to").is(ukey), new Criteria().and("froMaccount").is(ukey))),
                Aggregation.sort(Sort.Direction.DESC,"_id"),
                Aggregation.group("to","fromAccount")
        );

Aggregation.group 要排在Aggregation.match后面,否则结果集不准确。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 使用mongoTemplate实现多条件加分组查询方式

本文链接: https://lsjlt.com/news/153078.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用mongoTemplate实现多条件加分组查询方式
    目录mongoTemplate实现多条件查询mongoTemplate分组查询的坑先来一个常见的错误信息: Due to limitations of the com.mongodb...
    99+
    2024-04-02
  • lambdaQueryWrapper多条件嵌套查询方式
    目录lambdaQueryWrapper多条件嵌套查询表结构如下下面是根据条件生成的SQL语句LambdaQueryWrapper 常用条件lambdaQueryWrapper多条件...
    99+
    2024-04-02
  • 如何实现多条件查询
    这篇文章主要讲解了“如何实现多条件查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现多条件查询”吧! 而在对用户进行查...
    99+
    2024-04-02
  • 使用Spring Data JPA如何实现多条件的分页查询
    使用Spring Data JPA如何实现多条件的分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。话不多说,请看代码:public Map<String, Obje...
    99+
    2023-05-31
    spring 分页查询 dat
  • Springboot+Mybatis实现分页加条件查询功能
    本文实例为大家分享了Springboot+Mybatis实现分页加条件查询的具体代码,供大家参考,具体内容如下 User.xml <xml version="1.0" enco...
    99+
    2024-04-02
  • mybatis collection 多条件查询的实现方法
    mybatis collection 多条件查询的实现方法 前言: 业务需要通过mybatis 查询返回嵌套集合,嫌多次查询太麻烦,用自带的高级查询解决问题,下边是代码,已测试通过。 说下自己的理解,就是一...
    99+
    2024-04-02
  • mysql 带多个条件的查询方式
    mysql 带多个条件的查询 环境:mysql 5.7 当一个where语句中同时出现多个and 或者or时,需要将多个OR用小括号括起来再和AND进行“与”,或者将多个A...
    99+
    2024-04-02
  • layui多条件查询怎么实现
    在Layui中实现多条件查询可以通过以下步骤实现:1. 在HTML页面中创建一个表单,包含多个输入框或下拉框,用于用户输入查询条件。...
    99+
    2023-09-22
    layui
  • Layui如何实现多条件查询
    这篇文章主要介绍了Layui如何实现多条件查询,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。最近做一个档案系统,发现字段超多带分页的多条件查询(分页需要后端分页,传page给...
    99+
    2023-06-25
  • mybatis实现多条件模糊查询
    EmployeeMapper.xml SELECT id,NAME,gender,idcard,nationid FROM employee WHERE 1=1 ...
    99+
    2023-09-01
    sql 数据库 mysql
  • mongodb多条件查询怎么实现
    在 MongoDB 中,可以使用 $and、$or 等逻辑运算符来实现多条件查询。以下是使用 $and 运算符实现多条件查询的示例:...
    99+
    2024-04-10
    mongodb
  • 使用Mybatis如何实现多个控制条件查询
    目录实现多个控制条件查询扩展知识实现多个条件简单查询数据库的字段名和实体类的属性名不一致时实现多个条件复杂查询MyBatis条件查询总结1.if条件语句2.choose(whenot...
    99+
    2024-04-02
  • 使用JPA+querydsl如何实现多条件动态查询
    目录JPAquerydsl多条件动态查询介绍一下querydsl看源码springdataJPA和querydsl什么是SpringDataJPA?什么是QueryDSL?@Mapp...
    99+
    2024-04-02
  • 怎么使用JPA+querydsl实现多条件动态查询
    这篇文章将为大家详细讲解有关怎么使用JPA+querydsl实现多条件动态查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA querydsl多条件动态查询相信很多人在做订单管理的时候会用到多条件的...
    99+
    2023-06-29
  • MyBatisPlus-QueryWrapper多条件查询及修改方式
    目录gt、ge、lt、le、isNull、isNotNulleq、nebetween、notBetweenallEqlike、notLike、likeLeft、likeRightin...
    99+
    2024-04-02
  • 使用Mockjs模拟接口实现增删改查、分页及多条件查询
    目录一、什么是Mock?二、使用Mock有什么好处三、安装Mock四、效果图五、使用Mock模拟接口实现增删改查、分页、多条件查询总结一、什么是Mock? mock官网 mock测试...
    99+
    2024-04-02
  • linq多条件查询怎么使用
    本篇内容介绍了“linq多条件查询怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linq多条件查询,当条件为NUll时不做查询,只有...
    99+
    2023-06-17
  • Mybatis 实现动态组装查询条件,仿SQL模式
    目的: 以前比较习惯使用Hibernate,后来觉得mybatis不能按我想要的自动组装为SQL查询条件,所以提供该工具类; 效果图: 如图所示,根据条件自动组装查询条件,下面来...
    99+
    2024-04-02
  • SSH如何实现条件查询和分页查询
    这篇文章将为大家详细讲解有关SSH如何实现条件查询和分页查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、QueryHelper和PageResultQueryHel...
    99+
    2024-04-02
  • Springboot+Mybatis怎么实现分页加条件查询功能
    本篇内容介绍了“Springboot+Mybatis怎么实现分页加条件查询功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!User.xml...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作