자바 작업 mongodb 의 다 중 표 연결 검사 실현($lookup)

최근 에 개발 하 는 과정 에서 한 리스트 의 조 회 는 여러 표 의 관련 조회 와 관련 되 었 습 니 다.지구 층 은 mongodb 를 사용 하기 때문에 이 비 관계 형 데이터 에 대해 많이 사용 하지 않 았 기 때문에 이 기능 을 실현 하 는 과정 에서 많은 문제 가 발생 했 습 니 다.지금 은 기록 을 합 니 다.하 나 는 자신의 이 해 를 깊이 있 게 하기 위해 앞으로 이런 문제 가 발생 하면 신속하게 해결 할 수 있 습 니 다.둘 째 는 같은 문제 에 부 딪 힌 동료 들 에 게 작은 도움 을 준다.
전문 은 두 부분 으로 나 뉜 다.
  • robo 3t 를 사용 하여 다 중 표 관 계 를 작성 하 는 검색 어
  • 작 성 된 검색 어 를 자바 프로젝트 에 통합 합 니 다
  • 다 중 표 연결 검색 어:
    이 곳 에서 사용 하 는 mongodb 의 robo 3t 시각 화 도 구 는 먼저 요 구 를 말 합 니 다.A(로그 표 라면)표 에서 조건 에 맞 는 데 이 터 를 조회 하고 A 표 에서 조건 에 맞 는 데 이 터 를 조회 하여 B(정보 표 라면)표 의 데 이 터 를 조회 합 니 다.여기 서도 B 표 의 조회 조건 을 추가 할 수 있 습 니 다(관계 형 데이터 베이스 에 있 는 임시 표 유형)
    mongo 검색 어:
    
    db.getCollection('A').aggregate([
        {
        $lookup:{
              from:'B',
              localField:'userid',
              foreignField:'userid',
              as:'userinfo'
            }
        }, 
        {
         $unwind:'$userrole'//         ,          userrole    10  ,   $unwind            10 , 10     userrole    ,         ,          
        },
        {
         $match:{'username':'zhangsan'}
        },
        {
         $group:{
              _id:{
                  userid:'$userid',//        A    
                  userrole:'$userrole.roleid',//A       ,            roleid   
                },
              operateTime:{
                  $last:'$operateTime'// A           
                }
              info:{
                  $first:'$userinfo'//       ,          (  userrole  ),$first        
                }
            }
        },
        {
          $sort:{'operateTime':-1}//      ,-1:  ,1:  
        },
        {
          $skip:0//      ,            
        },
        {
          $limit:5//        
        }
    ]);
    
    자바 코드 통합 검색 어
    
    //      
    String[] groupIds = new String[] {"$userid","$userrole.roleid"};
    //      
    Criteria criteria = new Criteria();
    //   where username = "zhangsan"
    criteria.and("username").is("zhangsan");
    //    where age not in("15","20")
    criteria.and("age").nin("15","20");
    //in       
    //criteria.and("").in();
    //      
    Sort sort = new Sort(Direction.DESC,"operateTime");
    //       ,   
    Aggregation aggregationCount = Aggregation.newAggregation(
      Aggregation.match(criteria);//    
      Aggregation.group(groupIds);//    
    );
    //      
    Aggregation newAggregation = Aggregation.newAggregation(
      Aggregation.lookup('B','userid','userid','userinfo'),//   ,      ,      ,  
      Aggregation.unwind("$userrole"),
      Aggregation.match(criteria),
      Aggregation.group(groupIds)
        .last("$operateTime").as("operateTime")//  ,   
        .first("$userinfo").as("info"),
      Aggregation.sort(sort),
      Aggregation.skip(pageSize*(pageNumber-1L)),//Long     
      Aggregation.limit(pageSize)
    );
    //  
    AggregationResults<BasicDBObject> aggregate = mongoTemplate.aggregate(
      newAggregation ,"A",BasicDBObject.class//A ,      
    );
    int count = mongoTemplate.aggregate(aggregationCount ,"A",BasicDBObject.class).getMappedResults().size();
    //      
    Page<BasicDBObject> pager = new Page<>(aggregate.getMappedResults(),count,pageSize,pageNumber,page*(pageNumber-1));
    //    
     BasicDBObject          .....
    
    자바 작업 mongodb 의 다 중 표 연결 검색 의 실현($lookup)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 mongodb 다 중 표 연결 검색 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기