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

$ 패싯 (집계 단계)

$facet

동일한 입력 문서 세트에 대해 단일 단계 내에서 여러 개의 집계 파이프라인을 처리합니다. 각 하위 파이프라인에는 출력 문서에 자체 필드가 있으며, 여기서 결과는 문서 배열로 저장됩니다.

$facet 단계를 사용하면 단일 집계 단계 내에서 여러 차원 또는 패싯의 데이터를 특성화하는 다면적 집계를 생성할 수 있습니다. 다면적 패싯 집계는 데이터 탐색 및 분석을 안내하는 여러 필터와 분류를 제공합니다. 소매업체는 일반적으로 패싯을 사용하여 제품 가격, 제조업체, 크기 등에 대한 필터를 만들어 검색 결과의 범위를 좁힙니다.

입력 문서는 한 번만 $facet 단계로 전달되어 동일한 입력 문서 집합에 대해 다양한 집계가 가능합니다.

다음 환경에서 호스팅되는 배포에 $facet 사용할 수 있습니다.

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

$facet 단계의 형식은 다음과 같습니다.

{ $facet:
{
<outputField1>: [ <stage1>, <stage2>, ... ],
<outputField2>: [ <stage1>, <stage2>, ... ],
...
}
}

지정된 파이프라인 각각의 출력 필드 이름을 지정합니다.

$facet의 각 단계가 실행될 때마다 결과 문서는 100메가바이트로 제한됩니다. $facet은 디스크로 유출될 수 없으므로 allowDiskUse 플래그는 100메가바이트 크기 제한에 영향을 주지 않습니다.

최종 출력 문서에는 16메비바이트 BSON 문서 크기 제한이 적용됩니다. 16메비바이트를 초과하면 집계에서 오류가 발생합니다.

패싯과 관련된 집계 단계에서는 수신 문서를 분류하고 그룹화합니다. 다양한 $facet 하위 파이프라인의 <stage>에 다음과 같은 패싯 관련 단계를 지정해 다면적 집계를 수행할 수 있습니다.

다른 집계 단계도 $facet과 함께 사용할 수 있지만 다음과 같은 예외가 있습니다.

$facet 내의 각 하위 파이프라인에는 정확히 동일한 입력 문서 집합이 전달됩니다. 이러한 하위 파이프라인은 서로 완전히 독립적이며 각 하위 파이프라인의 문서 배열 출력은 출력 문서의 별도 필드에 저장됩니다. 한 하위 파이프라인의 출력은 동일한 $facet 단계 내에서 다른 하위 파이프라인의 입력으로 사용할 수 없습니다. 추가 집계가 필요한 경우 $facet 뒤에 단계를 추가하고 원하는 하위 파이프라인 출력의 필드 이름 <outputField>를 지정합니다.

파이프라인 순서에 따라 $facet 단계에서 인덱스를 사용하는 방식이 결정됩니다.

  • $facet 단계가 파이프라인의 첫 번째 단계인 경우 이 단계에서는 COLLSCAN을 수행합니다. $facet 단계가 파이프라인의 첫 번째 단계인 경우에는 인덱스를 사용하지 않습니다.

  • $facet 단계가 파이프라인의 후반부에 있고 이전 단계에서 인덱스를 사용한 경우, 실행 중에 $facet은 COLLSCAN을 트리거하지 않습니다.

예를 들어 $facet 단계 앞에 오는 $match 또는 $sort 단계는 인덱스를 사용할 수 있으며 $facet은 COLLSCAN을 트리거하지 않습니다.

최적화 제안 사항은 집계 파이프라인 최적화를 참조하세요.

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

다음 집계 파이프라인 movies 컬렉션 사용하여 영화를 여러 차원에 걸쳐 분류합니다. A $match stage limits the input to movies with a runtime greater than 1,000 minutes. $facet 단계는 $sortByCount, $bucket, 및 $bucketAuto를 사용하여 세 개의 하위 파이프라인을 병렬로 실행합니다. MongoDB 작업 시작 시 movies 컬렉션 에서 input document를 한 번만 가져옵니다.

db.movies.aggregate( [
{ $match: { runtime: { $gt: 1000 } } },
{
$facet: {
"categorizedByGenres": [
{ $unwind: "$genres" },
{ $sortByCount: "$genres" }
],
"categorizedByRuntime": [
{
$bucket: {
groupBy: "$runtime",
boundaries: [ 1000, 1200, 1400 ],
default: "Other",
output: {
"count": { $sum: 1 },
"titles": { $push: "$title" }
}
}
}
],
"categorizedByYear(Auto)": [
{
$bucketAuto: {
groupBy: "$year",
buckets: 4
}
}
]
}
}
] )
[
{
categorizedByGenres: [
{ _id: 'Sport', count: 1 },
{ _id: 'Documentary', count: 1 },
{ _id: 'Action', count: 1 },
{ _id: 'Drama', count: 1 },
{ _id: 'Adventure', count: 1 },
{ _id: 'History', count: 1 }
],
categorizedByRuntime: [
{ _id: 1000, count: 1, titles: [ 'Baseball' ] },
{ _id: 1200, count: 1, titles: [ 'Centennial' ] }
],
'categorizedByYear(Auto)': [
{ _id: { min: 1978, max: 1994 }, count: 1 },
{ _id: { min: 1994, max: 1994 }, count: 1 }
]
}
]

관련 파이프라인 단계에 대해 자세히 학습 $bucketAuto, $sortByCount 및 $limit 가이드를 참조하세요.