1、根据agentId字段分组,并对totalCustomerNum、refundCustomerNum字段 sum求和,同时取别名
@Override
public List<AgentCountInfoBean> selectCurrentMonthNewResource(Set<String> orderTypeSet, List<String> agentIds,
LocalDateTime startTime, LocalDateTime endTime) {
Aggregation aggr = newAggregation(
match(where("agentId").in(agentIds)
.and("agentOrderType").in(orderTypeSet)
.and("agentOrderStatus").in(Arrays.asList(AgentOrderStatusEnum.NOT_START.status, AgentOrderStatusEnum.PROCESSING.status))
.andOperator(
EmptyUtils.isNotEmpty(startTime) ? Criteria.where("createTime").gte(startTime) : new Criteria(),
EmptyUtils.isNotEmpty(endTime) ? Criteria.where("createTime").lte(endTime) : new Criteria(),
EmptyUtils.isNotEmpty(endTime) ? Criteria.where("hopeStartTime").lte(endTime) : new Criteria()
)
),
group("agentId").first("agentId").as("agentId").sum("totalCustomerNum").as("totalCount")
.sum("refundCustomerNum").as("refundCustomerNum")
);
AggregationResults<AgentCountInfoBean> results = secondaryMongoTemplate.aggregate(aggr, ResAgentOrderMo.class, AgentCountInfoBean.class);
if (EmptyUtils.isNotEmpty(results)) {
return results.getMappedResults();
}
return null;
}
2、对agentId分组,并统计每个agentId分组后的个数,类似于mysql的select agentId,count(agentId) from tabel group by agentId;
@Override
public List<String> findNonFirstMonthBuyResource(LocalDateTime startDate, List<String> leadingEagleIds, Set<String> agentOrderSetsT) {
Aggregation aggr = newAggregation(
match(where("agentId").in(leadingEagleIds)
.and("agentOrderType").in(agentOrderSetsT)
.and("agentOrderStatus").ne(AgentOrderStatusEnum.NOT_PAY.status)
.andOperator(
EmptyUtils.isNotEmpty(startDate) ? Criteria.where("payTime").lte(startDate) : new Criteria()
)
),
group("agentId").first("agentId").as("agentId").count().as("count")
);
AggregationResults<AgentCountBean> results = secondaryMongoTemplate.aggregate(aggr, ResAgentOrderMo.class, AgentCountBean.class);
if (EmptyUtils.isNotEmpty(results)) {
return results.getMappedResults().stream().map(AgentCountBean::getAgentId).collect(Collectors.toList());
}
return null;
}
3、根据条件查询,然后只返回某个字段同时去重
@Override
public List<String> findNotEndAgentIdsByTypeAndSaleAreas(Set<String> agentOrderTypes, List<String> areaIds) {
Query query = query(
where("age