2021. 2. 23. 16:43ㆍ프로그래밍-Web/MongoDB
상황
- Join과 유사한 방법으로 처리된 두 개의 컬렉션 데이터가 필요한데, 여러가지 조건이 존재하는 경우
- 예컨데 'A컬렉션의 name이라는 데이터가 포함된 description'이라는 데이터를 가지고 있는 B 컬렉션 데이터가 필요한 경우--- 설명이 장황하니 아래 실제 예시를 보자
위의 데이터는 work라는 도큐먼트이고
얘는 zone이라는 도큐먼트이다
zone도큐먼트의 name이 포함된 work의 name을 찾고싶은 상황이다.
그러나 이는 같은 project에 속해야하므로 projectId도 같은 데이터들만 반환해야 한다.
이렇게 복합적인 Join은 pipeline을 이용해 풀어낼 수 있다.
결과 코드는 다음과 같다.
이전 포스팅처럼 Lookup을 이용하지만, foreign과 local field를 바로 지정하지 않는다.
대신 from에 foreign 컬렉션만 지정한후 let으로 pipeline에 사용할 변수를 만든다
내 경우에는 단순히 같은 name의 데이터만 불러오는 것이 아니라, name에 string이 결합된 데이터를 불러오는 것이므로 concat을 이용해 새로운 zoneName이라는 변수를 만들었다
pipeline은 다음과 같이 설정한다.
이때 expr은 실행을 뜻하는 커맨드이고 그 안에 match 조건을 설정할 수 있다.
eq는 같다는 조건을 뜻하고 $가 한개만 붙은 변수는 foreign 필드를 두개 붙은건 local 필드를 뜻한다.
공식문서를 보면 pipeline은 여러가지 커맨드를 연속으로 사용할수 있게끔 되어있다.
공식문서의 예시는 컬렉션 3개에서 여러번의 조인을 거쳐 데이터를 가져오는 케이스이다
'프로그래밍-Web > MongoDB' 카테고리의 다른 글
[이슈] Mongodb의 배열 원소 업데이트 (0) | 2021.02.24 |
---|---|
[이슈] nodejs에서 MongoDB document의 Object Id 비교하기 (0) | 2021.02.23 |
[정리] Mongoose Index 설정 이슈 및 기본세팅 (0) | 2021.02.22 |
[aggregate] lookup으로 필요한 부분 JOIN하여 계산하기 (0) | 2021.02.10 |
[이슈] lookup의 from절 (0) | 2021.02.10 |