mongodb lookup 예제

JOIN은 MongoDB 집계 $lookup 연산자가 RDBMS에서 수행하는 것과 같은 두 개의 컬렉션에 대한 JOIN을 얻는 데 유용하고 강력하기 때문에 SQL과 NoSQL 데이터베이스의 주요 차이점 중 하나입니다. 이제 잘 서식이 지정된 일대일 문서 집합을 사용하여 두 번째 조회 테이블과 함께 한 테이블을 조인하는 SQL 보기를 효과적으로 재현합니다. $lookup 단계에서는 컬렉션에서 분리할 수 없습니다. 그러나 aggregate() 메서드를 실행하는 컬렉션은 샤드될 수 있습니다. 즉, 다음에서 집계 파이프라인에서 $lookup 사용하는 두 가지 예를 보았습니다. $lookup 같음 검사(첫 번째 예제)와 더 복잡한 하위 쿼리(두 번째 예제)에 모두 사용할 수 있습니다. $lookup 다음 필드와 문서를 걸립니다: 2 주 전에 새로운 집계 파이프라인 단계 $lookup (제한 된 왼쪽-외부 조인 연산자) MongoDB 엔터프라이즈 고급 서버에서만 사용할 수 있는 기능 될 것 이라고 발표 했다. 우리의 근거는 $lookup 다른 엔터프라이즈 기능의 원동력으로 간주하였고 커뮤니티 에디션에서 $lookup 광범위하게 사용할 수 있게 되면 MongoDB를 관계형 데이터베이스처럼 취급하는 사용자로 이어질 것이라고 우려했습니다. $lookup 연산자는 제품의 다른 단어 조인 주문에서 특정 제품에 대한 모든 주문을 받지 않을 수 있습니다. 베스트셀러 제품의 경우 수천 개의 주문이 있을 수 있으며 단일 배열 내에 추가된 모든 제품은 문서 크기 제한 배열을 유발할 수 있습니다. 이 간단한 경우 let 및 파이프라인 접근 방식이 더 복잡하지만 새로운 접근 방식도 더 유연합니다. 예를 들어, 아래 파이프라인은 보유 문서의 주식 자산과 주식 문서의 현재Price 자산을 기준으로 현재 가치가 $1000를 초과하는 모든 주식 보유를 찾습니다. $expr 연산자는 계산된 속성을 기반으로 쿼리할 수 있습니다.

이 기능은 $lookup 특히 강력하지만 쿼리에도 유용합니다. 예를 들어, 주식의 총 비용이 $1000를 초과하는 모든 주식 보유를 찾고 싶다고 가정해 보겠습니다. 즉, 주식 * basePrice 1000 `StockHolding`컬렉션에서 모든 문서를 찾을 수 있습니다. 이전 버전의 MongoDB에서는 $where 연산자와 함께 이 작업을 수행할 수 있지만 $where 운영자는 수많은 제한, 성능 제한 및 보안 문제로 어려움을 겪고 있습니다. MongoDB는 $where 대체로 $expr 사용하는 것이 좋습니다. 예를 들어, 아래는 localField 및 foreignField를 사용하여 각 보유에 해당하는 주식을 검색하는 기본 $lookup. 여기서는 문서와 관계형 데이터베이스의 장단점에 대해 논의하지 않을 것입니다. 둘 다 자신의 강점과 약점을 가지고있다. 이 문서에서는 두 컬렉션 간의 관계성이 필요하다고 판단해야 $lookup 집계를 사용하는 방법입니다. MongoDB는 관계형 데이터베이스가 아니지만 $lookup 단계를 사용하여 왼쪽 외부 조인을 수행할 수 있습니다.

동일한 데이터베이스에서 왼쪽 외부 조인을 하드되지 않은 컬렉션에 수행하여 처리를 위해 “조인된” 컬렉션의 문서를 필터링합니다. 각 입력 문서에 $lookup 단계는 “조인된” 컬렉션의 일치하는 문서인 요소가 있는 새 배열 필드를 추가합니다.

Posted in Uncategorized