AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

$unionWith (집계 단계)

$unionWith

버전 8.0에서 변경되었습니다.

두 개의 집계를 단일 결과 집합으로 결합합니다. $unionWith은 결합된 결과 세트(중복 항목 포함)를 다음 단계로 출력합니다.

결합된 결과 집합 문서가 출력되는 순서는 지정되지 않습니다.

$unionWith 단계에는 다음과 같은 구문이 있습니다.

{ $unionWith: { coll: "<collection>", pipeline: [ <stage1>, ... ] } }

처리하지 않고 지정된 collection의 모든 문서를 포함하려면 간단한 양식을 사용할 수 있습니다.

{ $unionWith: "<collection>" } // Include all documents from the specified collection

$unionWith 단계에서는 다음 필드가 있는 문서를 사용합니다.

필드
필요성
설명

pipeline이 생략된 경우 필수입니다. 그렇지 않은 경우 선택 사항입니다.

결과 집합에 포함하려는 파이프라인 결과가 있는 컬렉션 또는 보기입니다.

coll 필드를 생략하는 경우 첫 번째 단계가 $documents인 pipeline 필드를 지정해야 합니다.

coll이 생략된 경우 필수입니다. 그렇지 않은 경우 선택 사항입니다.

입력 문서에 적용할 집계 파이프라인입니다.

  • coll을 지정하면 파이프라인은 coll의 문서에 적용됩니다.

  • coll을 생략하면 파이프라인의 $documents 단계에 있는 문서에 파이프라인이 적용됩니다. 예시를 보려면 지정된 문서로 유니온 생성을 참조하세요.

파이프라인에 $out 및 $merge 단계를 포함할 수 없습니다. v6.0부터 pipeline 에는 파이프라인 내부의 첫 단계로 MongoDB Search $search 단계가 포함될 수 있습니다. 자세히 알아보려면 MongoDB Search 지원을 참조하세요.

$unionWith 작업은 다음 SQL 문에 해당합니다.

SELECT *FROM Collection1WHERE ...UNION ALLSELECT *FROM Collection2WHERE ...

이전 단계와 $unionWith 단계의 결과를 합친 결과에는 중복이 포함될 수 있습니다.

예시, 다음 집계는 movies 컬렉션에 대한 두 쿼리의 title 필드 프로젝션 결과를 결합합니다. 결과 집합에 중복된 항목이 포함되어 있습니다.

db.movies.aggregate( [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, _id: 0 } }, { $unionWith: { coll: "movies", pipeline: [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, _id: 0 } } ] } }] )
[ { title: 'Centennial' }, { title: 'Baseball' }, { title: 'Centennial' }, { title: 'Baseball' }]

중복 항목을 제거하려면 $group 단계를 포함하여 title 필드별로 그룹화할 수 있습니다. 집합에 더 이상 중복된 항목이 포함되지 않는 경우:

db.movies.aggregate( [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, _id: 0 } }, { $unionWith: { coll: "movies", pipeline: [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, _id: 0 } } ] } }, { $group: { _id: "$title" } }, { $sort: { _id: 1 } }] )
[ { _id: 'Baseball' }, { _id: 'Centennial' }]

db.collection.aggregate() 에 collation 문서 포함된 경우 작업은 해당 데이터 정렬을 사용하고 다른 데이터 정렬은 무시합니다.

db.collection.aggregate() 에 collation 문서가 포함되어 있지 않은 경우 db.collection.aggregate() 메서드는 db.collection.aggregate() 가 실행되는 최상위 컬렉션/뷰에 대한 데이터 정렬을 사용합니다.

  • unionWith coll collection인 경우 해당 콜레이션은 무시됩니다.

  • $unionWith coll이 보기인 경우 해당 컬렉션의 데이터 정렬은 최상위 컬렉션/보기의 데이터 정렬과 일치해야 합니다. 그렇지 않으면 작동 오류가 발생합니다.

MongoDB 6.0 부터는 파이프라인 에서 MongoDB Search $search 또는 $searchMeta 단계를 지정하여 $unionWith Atlas cluster 에서 컬렉션을 검색 수 있습니다. $search 또는 $searchMeta 단계는 $unionWith 파이프라인 내의 첫 번째 단계여야 합니다.

를 $unionWith 사용한 $search 의 예시 보려면 MongoDB Search 튜토리얼 $unionWith를 사용하여 MongoDB Search $ 검색 쿼리 실행하기를 참조하세요.

MongoDB 8.0부터 $lookup 및 $unionWith 내의 서브파이프라인의 네임스페이스가 from 및 coll 필드의 올바른 사용을 보장하기 위해 검증됩니다.

  • $lookup의 경우 지정된 컬렉션이 필요하지 않은 단계를 사용하는 서브파이프라인을 사용할 때는 from 필드를 생략합니다. 예를 들어 $documents 단계입니다.

  • 마찬가지로, $unionWith의 경우 coll 필드를 생략합니다.

변경되지 않은 동작:

  • 예를 들어 $match 또는 $collStats서브파이프라인과 같이 컬렉션을 위한 단계로 시작하는 $lookup의 경우 from 필드를 포함하고 컬렉션을 지정해야 합니다.

  • 마찬가지로 $unionWith의 경우 coll 필드를 포함하고 컬렉션을 지정합니다.

제한 사항
설명

집계 파이프라인은 트랜잭션 내에서 $unionWith를 사용할 수 없습니다.

$unionWith 파이프라인은 $out 단계를 포함할 수 없습니다.

$unionWith 파이프라인은 $merge 단계를 포함할 수 없습니다.

이 페이지의 예시는 sample_mflix 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우, 이 페이지의 예시를 실행하려면 데이터베이스를 제거하고 다시 생성해야 할 수 있습니다.

다음 예시에서는 $unionWith 단계를 사용하여 데이터를 결합하고 movies 컬렉션에서 결과를 반환합니다.

다음 집계는 카테고리별로 영화를 나열하는 영화 보고서를 생성합니다. 파이프라인은 $unionWith을(를) 사용하여 movies 컬렉션의 문서를 결합합니다.

db.movies.aggregate( [ { $match: { year: { $lt: 1910 } } }, { $set: { category: "Early Cinema" } }, { $unionWith: { coll: "movies", pipeline: [ { $match: { runtime: { $gt: 1000 } } }, { $set: { category: "Long Runtime" } } ] } }, { $project: { title: 1, year: 1, category: 1, _id: 0 } }, { $sort: { category: 1, year: 1, title: 1 } }] )
[ { title: 'The Kiss', year: 1896, category: 'Early Cinema' }, { title: 'The Kiss', year: 1896, category: 'Early Cinema' }, { title: 'The Great Train Robbery', year: 1903, category: 'Early Cinema' }, { title: 'A Corner in Wheat', year: 1909, category: 'Early Cinema' }, { title: 'Centennial', year: 1978, category: 'Long Runtime' }, { title: 'Baseball', year: 1994, category: 'Long Runtime' }]

특히 집계 파이프라인은 다음을 사용합니다.

  • 1910 이전에 개봉된 영화를 선택하기 위한 $match 단계입니다.

  • Early Cinema 값을 가진 category 필드를 추가하기 위한 $set 단계입니다.

  • movies 컬렉션의 문서를 결합하는 $unionWith 단계로, runtime가 1000보다 크고 Long Runtime 카테고리로 태그가 지정된 영화로 필터링됩니다.

  • title, year, category 필드만 반환하는 $project 단계입니다.

  • category, year 및 title를 기준으로 정렬하는 $sort 단계.

다음 집계는 장르별 총 런타임을 나열하는 영화 보고서를 만듭니다. 파이프라인은 $unionWith을(를) 사용하여 movies 컬렉션의 문서를 결합합니다.

db.movies.aggregate( [ { $match: { year: { $lt: 1910 } } }, { $unionWith: { coll: "movies", pipeline: [ { $match: { runtime: { $gt: 1000 } } } ] } }, { $group: { _id: "$genres", totalRuntime: { $sum: "$runtime" } } }, { $sort: { totalRuntime: -1 } }] )
[ { _id: [ 'Action', 'Adventure', 'Drama' ], totalRuntime: 1256 }, { _id: [ 'Documentary', 'History', 'Sport' ], totalRuntime: 1140 }, { _id: [ 'Short', 'Drama' ], totalRuntime: 14 }, { _id: [ 'Short', 'Western' ], totalRuntime: 11 }, { _id: [ 'Short', 'Romance' ], totalRuntime: 2 }]
  • $match 및 $unionWith 단계는 movies 컬렉션에서 파이프라인으로 문서를 조회합니다.

  • $group 단계는 genres 필드를 기준으로 그룹화하고 $sum을(를) 사용하여 genres 값당 총 runtime을(를) 계산합니다.

  • $sort 단계에서는 totalRuntime내림차순으로 문서를 정렬합니다.

$unionWith를 사용하여 pipeline 필드에 지정한 문서와 유니온을 수행할 수 있습니다. pipeline 필드에 $documents 단계를 지정하면 별도의 컬렉션에 저장되지 않은 문서와의 유니온이 수행됩니다.

다음 $unionWith 작업은 pipeline $documents 필드에 지정된 문서와 유니온을 수행합니다.

db.movies.aggregate( [ { $match: { runtime: { $gt: 1000 } } }, { $project: { title: 1, year: 1, _id: 0 } }, { $unionWith: { pipeline: [ { $documents: [ { title: "Movie A", year: 2000 }, { title: "Movie B", year: 2001 } ] } ] } }] )
[ { title: 'Centennial', year: 1978 }, { title: 'Baseball', year: 1994 }, { title: 'Movie A', year: 2000 }, { title: 'Movie B', year: 2001 }]