Springboot聚合mongoDB,条件查询, 聚合统计

一.maven引包

 <!-- mongodb -->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

二.mongo连接

yml配置

spring:
  data:
    mongodb:
      uri: mongodb://root(账号):123456(密码)@192.168.2.1:2000/demo(库名)

三.实体类

实体类加上注解@Document, mongo存储的结果就是文档 , collection里填的是我们映射的表名 ,
特别要注意的就是mongo的id类型是ObjectId

@Document(collection = "order_sale_order_usd")
public class MongoSaleOrderUSD {
	private ObjectId id;
	
	private Long saleOrderId;


    private Long saleOrderProductId;

    /**
     * 企业id
     */
    private Long entId;

    /**
     * 客户经理id
     */
    private Long customerManagerId;

    /**
     * 客户经理
     */
    private String customerManagerName;

	......
	......(省略getter setter)
}

三.按条件查询列表

直接上代码

List<Criteria> criteriaList = new ArrayList<>();

// 1.企业信息
Criteria entCriteria = Criteria.where("entId").is(userSessionVO.getCurrentEntId());
criteriaList.add(entCriteria);

// 2.业务类型
List<Long> businessTypeList = condition.getBusinessTypeList();
if (!CollectionUtils.isEmpty(businessTypeList)) {
   criteriaList.add(Criteria.where("businessType").in(businessTypeList));
}

// 3.订单状态
List<Integer> saleOrderStatusList = condition.getSaleOrderStatusList();
if (!CollectionUtils.isEmpty(saleOrderStatusList)) {
   criteriaList.add(Criteria.where("saleOrderStatus").in(saleOrderStatusList));
}

// 10.供应商(表里存储的是一个list)
if (condition.getSupplierId() != null) {
	criteriaList.add(Criteria.where("purchaseOrderList")
	.elemMatch(Criteria.where("supplierId").is(condition.getSupplierId())));
}

// 8.销售合同号(模糊查询)
String saleContractCode = condition.getSaleContractCode();
if (StringUtils.isNotBlank(saleContractCode)) {
    Pattern pattern = SqlUtil.mongoFullLikeWithEscape(saleContractCode);
    criteriaList.add(Criteria.where("saleContractCode").regex(pattern));
}


.....(省略部分条件)
Criteria criteria = new Criteria();
Criteria[] criteriaArray = new Criteria[criteriaList.size()];
criteria.andOperator(criteriaList.toArray(criteriaArray));
Query query = Query.query(criteria);


// 排序规则
Sort sort = null;
// 排序
if (!CollectionUtils.isEmpty(saleOrderQueryVO.getQueryOrderList())) {
    for (BaseQueryOrderVO baseQueryOrderVO : saleOrderQueryVO.getQueryOrderList()) {
        Integer order = baseQueryOrderVO.getOrder();
        String field = baseQueryOrderVO.getField();
        if (sort == null) {
            sort = Sort.by(order == 0 ? Sort.Direction.ASC : Sort.Direction.DESC, field);
            continue;
        }
        sort.and(Sort.by(order == 0 ? Sort.Direction.ASC : Sort.Direction.DESC, field));
    }
}

query.with(sort == null ? Sort.by(Sort.Direction.DESC, "createTime", "saleOrderId") : sort);

// 封装了mongoTemplate.find()
List<MongoSaleOrderUSD> mongoSaleOrderList = mongoSaleOrderDao.selectList(pageInfo, query);

😃同一层级的Criteria 只能有一个andOperation 或者orOperation,所以多个条件一定要放在一个andOperation 或者orOperation里面

1.查询list里面对象的条件是看上面第十个(存储的是一个list)
2.模糊查询(特殊字符转义)

public static Pattern mongoFullLikeWithEscape(String param) {
        if (StringUtils.isBlank(param)) {
            return null;
        }
        return Pattern.compile(StringUtil.concat("^.*", mongoFormatWithEscape(param), ".*$"), Pattern.CASE_INSENSITIVE);
}

下次有时间在介绍一下聚合统计

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值