首页 > 编程语言 >在JAVA中使用mongoTemplate构造查询条件

在JAVA中使用mongoTemplate构造查询条件

时间:2023-07-03 11:33:36浏览次数:55  
标签:JAVA bo ids 查询 isNotNull mongoTemplate criteria Criteria StringUtils

// 创建条件对象
Criteria criteria = new Criteria();
// 3. 单个条件查询多个字段 (客户编号)
if (StringUtils.isNotEmpty(bo.getAdmpId())) {
    criteria.orOperator(
            Criteria.where("final_uid").is(bo.getAdmpId()),
            Criteria.where("customer_ids").in(bo.getAdmpId()),
            Criteria.where("official_ids").in(bo.getAdmpId()),
            Criteria.where("tb_ids").in(bo.getAdmpId()),
            Criteria.where("jd_ids").in(bo.getAdmpId()),
            Criteria.where("yz_ids").in(bo.getAdmpId()),
            Criteria.where("wm_ids").in(bo.getAdmpId()),
            Criteria.where("dd_ids").in(bo.getAdmpId()),
            Criteria.where("ks_ids").in(bo.getAdmpId())
    );
}
// 2. 模糊查询 (客户名称模糊搜索)
if (StringUtils.isNotBlank(bo.getName())) {
    criteria.and("name").regex(Pattern.compile("^.*" + bo.getName() + ".*$", Pattern.CASE_INSENSITIVE));
}
// 1. 全等于 (手机号全字匹配)
if (StringUtils.isNotBlank(bo.getMobile())) {
    criteria.and("mobile").is(bo.getMobile());
}
if (StringUtils.isNotBlank(bo.getBindStatus())) {
    criteria.and("bind_status").is(bo.getBindStatus());
}
if (StringUtils.isNotBlank(bo.getRetentionStatus())) {
    criteria.and("retention_status").is(bo.getRetentionStatus());
}
// 4. 日期范围 (近期消费时间)
if (StringUtils.isNotEmpty(bo.getRecentlyBuyBeginTime()) && StringUtils.isNotEmpty(bo.getRecentlyBuyEndTime())) {
    criteria.andOperator(Criteria.where("recently_buy_time").gte(bo.getRecentlyBuyBeginTime()), Criteria.where("recently_buy_time").lte(bo.getRecentlyBuyEndTime()));
}
if (StringUtils.isNotNull(bo.getLowestTotalBuyAmount()) && StringUtils.isNotNull(bo.getHighestTotalBuyAmount())) {
    criteria.and("total_buy_amount").gte(bo.getLowestTotalBuyAmount()).lte(bo.getHighestTotalBuyAmount());
}
if (StringUtils.isNotNull(bo.getLowestTotalBuyAmount()) && StringUtils.isNull(bo.getHighestTotalBuyAmount())) {
    criteria.and("total_buy_amount").gte(bo.getLowestTotalBuyAmount());
}
if (StringUtils.isNull(bo.getLowestTotalBuyAmount()) && StringUtils.isNotNull(bo.getHighestTotalBuyAmount())) {
    criteria.and("total_buy_amount").lte(bo.getHighestTotalBuyAmount());
}
// 5. 数值范围 (消费总金额)
if (StringUtils.isNotNull(bo.getMinTotalBuyTimes()) && StringUtils.isNotNull(bo.getMaxTotalBuyTimes())) {
    criteria.and("total_buy_count").gte(bo.getMinTotalBuyTimes()).lte(bo.getMaxTotalBuyTimes());
}
if (StringUtils.isNotNull(bo.getMinTotalBuyTimes()) && StringUtils.isNull(bo.getMaxTotalBuyTimes())) {
    criteria.and("total_buy_count").gte(bo.getMinTotalBuyTimes());
}
if (StringUtils.isNull(bo.getMinTotalBuyTimes()) && StringUtils.isNotNull(bo.getMaxTotalBuyTimes())) {
    criteria.and("total_buy_count").lte(bo.getMaxTotalBuyTimes());
}
if (!CollectionUtils.isEmpty(Arrays.asList(bo.getAdmpLabels()))) {
    if ("all".equals(bo.getTagScope())) {
        //  7. 数组字段满足全部 (客户标签)
        criteria.and("admp_labels").all(bo.getAdmpLabels());
    } else if ("any".equals(bo.getTagScope())) {
        criteria.and("admp_labels").in(bo.getAdmpLabels());
    }
}
if (StringUtils.isNotEmpty(bo.getReceiverMobile())) {
    criteria.and("receiver_mobiles").in(bo.getReceiverMobile());
}
// 6. 数组字段满足任一 (来源平台、下单店铺)
if (StringUtils.isNotNull(bo.getPlatformTypes()) && bo.getPlatformTypes().length > 0) {
    criteria.and("source_codes").in(bo.getPlatformTypes());
}
if (StringUtils.isNotNull(bo.getShopIds()) && bo.getShopIds().length > 0) {
    criteria.and("shop_ids").in(bo.getShopIds());
}
if (StringUtils.isNotNull(bo.getReceiverProvince()) && bo.getReceiverProvince().length > 0) {
    criteria.and("receiver_provinces").in(bo.getReceiverProvince());
}
if (StringUtils.isNotNull(bo.getReceiverCity()) && bo.getReceiverCity().length > 0) {
    criteria.and("receiver_cities").in(bo.getReceiverCity());
}
if (StringUtils.isNotNull(bo.getReceiverDistrict()) && bo.getReceiverDistrict().length > 0) {
    criteria.and("receiver_districts").in(bo.getReceiverDistrict());
}
Query query = new Query();
query.addCriteria(criteria);
// 12. 总记录数
long total = mongoTemplate.count(query, ClientBasicInfoDO.class);
// 8. 查询返回指定字段 (自定义列表)
query.fields().include("final_uid", "name", "wechat_id", "mobile", "u_id", "retention_status", "tb_ids", "jd_ids", "yz_ids", "tb_ids", "wm_ids", "dd_ids", "ks_ids");
// 10. 分页
query.with(PageRequest.of(bo.getPageNum() - 1, bo.getPageSize(), 
// 11. 排序
Sort.by(Sort.Order.desc("earliest_add_time"))));
// 执行查询
List<ClientBasicInfoDO> list = mongoTemplate.find(query, ClientBasicInfoDO.class);

 

标签:JAVA,bo,ids,查询,isNotNull,mongoTemplate,criteria,Criteria,StringUtils
From: https://www.cnblogs.com/mihutao/p/17522327.html

相关文章

  • JavaScript 事件的委派
    <!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title></title> <scripttype="text/javascript"> window.onload=function(){ varu1=document.getElementById("......
  • java中多线程synchronized锁升级的原理是什么?
    在Java中,synchronized关键字用于实现线程之间的同步,确保多个线程对共享资源的访问是有序的。当一个线程获取到对象的锁时,其他线程将被阻塞,直到该线程释放锁。Java中的锁升级是指JVM对synchronized锁的优化过程。为了提高程序的性能,JVM使用了不同的锁状态。具体的锁状态如下:无锁状态......
  • java对象的内存布局
    写java时不管是我们自己new对象还是spring管理bean,尽管我们天天跟对象打交道,那么对象的结构和内存布局有多少人知道呢,这篇文章可带你入门,了解java对象内存布局。本文涉及到JVM指针压缩的知识点,不熟悉的小伙伴可以看前面写过的一篇关于指针压缩的文章。JVM之指针压缩首先说明,本......
  • 狂收 3K Star!一个高性能、无侵入的 Java 性能监控和统计工具,十分强悍!
    背景随着所在公司的发展,应用服务的规模不断扩大,原有的垂直应用架构已无法满足产品的发展,几十个工程师在一个项目里并行开发不同的功能,开发效率不断降低。于是公司开始全面推进服务化进程,把团队内的大部分工程师主要精力全部都集中到服务化中。服务化可以让每个工程师仅在自己负......
  • java中的BO根DTO的区别以及使用场景
    java中的BO根DTO的区别以及使用场景  BO(BusinessObject)业务对象BO就是PO(PersistantObject)的组合简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个......
  • 获取系统时间在java中怎么操作,还可以指定格式
    ​ 要在Java中获取当前时间并将其格式化为指定形式,可以使用java.time包中的LocalDateTime和DateTimeFormatter类。下面是一个示例代码,演示如何获取系统时间并将其格式化为指定的字符串格式: importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;p......
  • 获取系统时间在java中怎么操作,还可以指定格式
    ​ 要在Java中获取当前时间并将其格式化为指定形式,可以使用java.time包中的LocalDateTime和DateTimeFormatter类。下面是一个示例代码,演示如何获取系统时间并将其格式化为指定的字符串格式: importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;p......
  • dmPython连接达梦数据库,查询含有特殊字符报错'gbk' codec can't decode byte 0xaa in
     解决方法,可以在应用连接字符串url连接属性加上local_code=1指定客户端字符编码方式。#local_code=1表示执行客户端的本地编码是UTF-8,否则默认是GBKdm_conn=dmPython.connect(user=dm_user,password=dm_password,server='localhost',port=5236,local_code=1) 参考网......
  • 如何在JavaScript中使用Promise.allSettled()
    您是否曾经在JavaScript中使用过Promise,并且当有人拒绝并毁掉一切时感到沮丧?你编写了一些基于Promise的代码,一切都进展顺利,然后繁荣——一个小小的Promise被拒绝,整个链条就会崩溃。你的代码逐渐停止,你想知道为什么JavaScript不能忽略这个小问题并继续它的快乐之路。好......
  • Java|Spring Boot 一些名词和常用概念(1)
    JVMJVM(JavaVirtualMachine)is anabstractmachinethatenablesyourcomputertorunaJavaprogram.WhenyouruntheJavaprogram,JavacompilerfirstcompilesyourJavacodetobytecode.Then,theJVMtranslatesbytecodeintonativemachinecode(set......