Mongo常用语法(java代码)

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值