一.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);
}
下次有時間在介紹一下聚合統計