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);
}

下次有時間在介紹一下聚合統計

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章