mongodb两表查询

package com.beagledata.mgc.lucas.jdcvmatch.admin.service.impl;

import com.beagledata.mgc.lucas.jdcvmatch.admin.mapper.PermissionMapper;
import com.beagledata.mgc.lucas.jdcvmatch.admin.service.RecommendService;
import com.beagledata.mgc.lucas.jdcvmatch.common.domain.CV;
import com.beagledata.utils.StringUtil;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class RecommendServiceImpl implements RecommendService{
private static Logger logger = LogManager.getLogger(RecommendServiceImpl.class);
@Autowired
private PermissionMapper permissionMapper;
@Autowired
private MongoTemplate mongoTemplate;

@Override
public List<CV> selectList(String jdid, int page, int pageNum) {
    if (StringUtil.isBlank(jdid)) {
        throw new IllegalArgumentException("jdid不能为空!")    ;
    }
    Criteria criteria = new Criteria();
    List<AggregationOperation> operations = new ArrayList<>();
    operations.add(Aggregation.match(criteria.and("jdId").is(jdid)));
    //toObjectId只适用于mongodb4
    operations.add(Aggregation.project().andExpression("\"$recommend.cvId\"").as("recommend"));
    operations.add(UnwindOperation.newUnwind().path("recommend").noArrayIndex().skipNullAndEmptyArrays());
    operations.add(LookupOperation.newLookup()
            .from("cv")
            .localField("recommend")
            .foreignField("cvId")
            .as("cv"));
    operations.add(UnwindOperation.newUnwind().path("cv").noArrayIndex().skipNullAndEmptyArrays());
    operations.add(Aggregation.project()
            .andExpression("\"$cv._id\"").as("_id")
            .andExpression("\"$cv.updateTime\"").as("updateTime")
            .andExpression("\"$cv.createTime\"").as("createTime")
            .andExpression("\"$cv.name\"").as("name")
            .andExpression("\"$cv.cvId\"").as("cvId")
            .andExpression("\"$cv.sex\"").as("sex")
            .andExpression("\"$cv.marriage\"").as("marriage")
            .andExpression("\"$cv.birth\"").as("birth")
            .andExpression("\"$cv.addr\"").as("addr")
            .andExpression("\"$cv.assessment\"").as("assessment")
            .andExpression("\"$cv.edu\"").as("edu")
            .andExpression("\"$cv.projectExperience\"").as("projectExperience")
            .andExpression("\"$cv.currentSalary\"").as("currentSalary")
            .andExpression("\"$cv.trainingCourses\"").as("trainingCourses")
            .andExpression("\"$cv.other\"").as("other")
            .andExpression("\"$cv.workExperience\"").as("workExperience"));
    operations.add(Aggregation.skip((page - 1) * pageNum));
    operations.add(Aggregation.limit(pageNum));
    Aggregation aggregationCount = Aggregation.newAggregation(operations);
    AggregationResults results = mongoTemplate.aggregate(aggregationCount, "recommendTask", CV.class);
    List<CV> list = results.getMappedResults();
    return list;
}

@Override
public int selectListTotal(String jdid) {
    Criteria criteria = new Criteria();
    List<AggregationOperation> operations = new ArrayList<>();
    operations.add(Aggregation.match(criteria.and("jdId").is(jdid)));
    operations.add(Aggregation.project().andExpression("\"$recommend.cvId\"").as("recommend"));
    operations.add(UnwindOperation.newUnwind().path("recommend").noArrayIndex().skipNullAndEmptyArrays());
    Aggregation aggregationCount = Aggregation.newAggregation(operations);
    AggregationResults results = mongoTemplate.aggregate(aggregationCount, "recommendTask", CV.class);
    List<CV> list = results.getMappedResults();
    return list.size();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值