정의
facetfacet수집기는 지정된 패싯 필드의 값 또는 범위별로 결과를 그룹화하고 해당 그룹 각각의 개수를 반환합니다.facet을(를)$search,$searchMeta단계 모두에 사용할 수 있습니다. MongoDB는facet을(를)$searchMeta단계와 함께 사용하여 쿼리에 대한 메타데이터 결과만 검색할 것을 권장합니다. 메타데이터 결과와 쿼리 결과를$search단계를 사용하여 검색하려면$$SEARCH_META집계 변수를 사용해야 합니다.SEARCH_META집계 변수를 참조하세요.storedSource를 embeddedDocuments 필드 유형 정의에 정의하면, returnScope와 returnStoredSource를 사용하여 객체 배열 내부의 중첩 필드를 패싯으로 지정할 수 있습니다. 그렇지 않으면 루트 embeddedDocuments 유형 필드에서만 패싯할 수 있습니다. 패싯의 예시는 다음과 같습니다.
객체 배열 내에 중첩 필드, returnScope 예시를 참조하세요.
embeddedDocument을 사용하여embeddedDocuments배열의 하위 항목을 일치시키는 방법은 Embedded-Scoped 패싯 예시를 참조하세요.루트
embeddedDocuments유형 필드, 패싯 쿼리를 참조하세요.
구문
facet 의 구문은 다음과 같습니다:
{ "$searchMeta"|"$search": { "index": <index name>, // optional, defaults to "default" "facet": { "operator": { <operator-specifications> }, "facets": { <facet-definitions> } }, "returnScope": { "path": "<embedded-documents-field-to-query>" }, "returnStoredSource": true } }
필드
메모리 요구 사항
패싯 쿼리는 클러스터 계층에 관계없이 메모리 집약적입니다. 패싯 집계 또는 중첩 패싯을 지정하는 쿼리는 다른 패싯 쿼리보다 더 많은 메모리와 디스크를 필요로 합니다. 프로덕션에서 패싯을 사용하기 전에 클러스터에 워크로드에 충분한 메모리가 있는지 확인하세요. 자세히 알아보려면 검색 메모리 관리를 참조하세요. 워크로드에 대한 크기 조정 지침을 받으려면 지원팀에 요청.
패싯 쿼리에 필요한 메모리는 패싯할 필드의 고유 값 수에 따라 달라지며, numBuckets 또는 boundaries을(를) 사용하여 요청하는 버킷 수에 따라 달라지지 않습니다. 예시를 들어, 500만개의 고유값을 가진 필드에서 20 개의 버켓을 요청하는 패싿은 여전히 모든 고유값을 계산하여 상위 20 개의 버켓을 결정합니다.
중첩된 패싯의 경우, 쿼리에서 계산된 총 고유 값은 각 중첩 수준의 고유 값을 기준으로 곱해집니다. 각 개별 필드의 카디널리티가 낮더라도 중첩된 경로에 걸친 값의 조합은 많은 수의 고유 버킷을 생성할 수 있습니다. 중첩된 패싯이 버킷을 곱하는 방법에 대해 자세히 알아보려면 중첩된 패싯을 참조하세요.
MongoDB Search는 각 쿼리에 대해 버킷 수를 별도로 추적하므로 총 메모리 사용량은 동시 패싯 쿼리 수에 따라 확장됩니다. 샤딩된 클러스터에서 MongoDB Search는 각 샤드의 버킷을 병합하기 위해 메모리도 필요로 하며, 이는 샤드 수와 버킷 수에 따라 확장됩니다.
패싯 정의
패싯 정의 문서 에는 패싯 이름과 패싯 유형별 옵션이 포함되어 있습니다. MongoDB Search는 다음 유형의 패싯을 지원합니다.
문자열 패싯
중요
stringFacet 은 이제 구식입니다. 대신 향상된 패싯을 제공하는 토큰을 사용합니다.
패싯에 대해 업데이트된 필드 유형과 오래된 필드 유형 간의 차이점에 대해 자세히 알아보려면 패싯의 필드 유형 비교를 참조하세요.
string 패싯을 사용하면 지정된 string 필드에서 가장 빈번한 string 값을 기준으로 MongoDB Search 결과의 범위를 좁힐 수 있습니다. string 필드는 토큰으로 인덱스되어야 합니다. 내장된 문서의 string 필드에 패싯을 수행하려면 상위 필드도 문서 유형으로 인덱싱해야 합니다. 배열 또는 내장된 문서의 문자열에 패싯을 적용할 때 MongoDB Search는 일치하는 루트 문서 수를 기반으로 패싯 개수를 반환합니다.
구문
문자열 패싯의 구문은 다음과 같습니다:
{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "string", "path" : "<field-path>", "numBuckets" : <number-of-categories>, "embeddedDocument": { <embedded-document-scope> } // optional } } } } }
옵션
옵션 | 유형 | 설명 | 필수 사항입니다. |
|---|---|---|---|
| 객체 | 쿼리 조건자와 일치하는 | no |
| int | 결과에 반환할 패싯 카테고리의 최대 개수입니다. 값은 | no |
| 문자열 | 패싯을 설정할 필드 경로입니다. 토큰으로 인덱싱되는 필드를 지정할 수 있습니다. | 네 |
| 문자열 | 패싯의 유형입니다. 값은 | 네 |
예시
예시
다음 예시는 sample_mflix.movies 컬렉션의 default라는 인덱스를 사용합니다. 컬렉션의 genres 필드는 토큰 유형으로 인덱싱되고 year 필드는 숫자 유형으로 인덱싱됩니다.
{ "mappings": { "dynamic": false, "fields": { "genres": { "type": "token" }, "year": { "type": "number" } } } }
이 쿼리는 $searchMeta 단계를 사용하여 movies 컬렉션의 year 필드에서 2000년부터 2015년까지의 영화를 검색하고 각 장르의 영화 수 개수를 검색합니다.
1 db.movies.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "range": { 7 "path": "year", 8 "gte": 2000, 9 "lte": 2015 10 } 11 }, 12 "facets": { 13 "genresFacet": { 14 "type": "string", 15 "path": "genres" 16 } 17 } 18 } 19 } 20 } 21 ])
이러한 결과에 대해 자세히 알아보려면 패싯 결과를 참조하세요.
숫자 패싯
중요
numberFacet 은 이제 구식입니다. 대신 숫자 를 사용하면 향상된 패싯을 제공합니다.
패싯에 대해 업데이트된 필드 유형과 오래된 필드 유형 간의 차이점에 대해 자세히 알아보려면 패싯의 필드 유형 비교를 참조하세요.
숫자 패싯을 사용하면 결과를 별도의 숫자 범위로 나누어 검색 결과에서 숫자 값의 빈도를 결정할 수 있습니다. 배열이나 내장된 문서의 숫자를 패싯 경우 MongoDB Search는 일치하는 루트 문서 수를 기준으로 패싯 수를 반환합니다.
구문
숫자 패싯의 구문은 다음과 같습니다:
{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "number", "path" : "<field-path>", "boundaries" : <array-of-numbers>, "default": "<bucket-name>", "embeddedDocument": { <embedded-document-scope> } // optional } } } } }
옵션
옵션 | 유형 | 설명 | 필수 사항입니다. |
|---|---|---|---|
| 숫자 배열 | 버킷의 경계를 지정하는 오름차순의 숫자 값 목록입니다. 경계 값은 2개에서 10,000개(
| 네 |
| 문자열 | 지정된 경계에 속하지 않는 연산자 로부터 반환된 문서를 계산하는 추가 버킷의 이름입니다. 생략하면 MongoDB Search는 지정된 버킷에 속하지 않는 패싯 연산자 의 결과도 포함하지만 버킷 수에는 포함하지 않습니다. | no |
| 객체 | 쿼리 조건자와 일치하는 | no |
| 문자열 | 패싯을 설정할 필드 경로입니다. number 유형으로 인덱싱되는 필드를 지정할 수 있습니다. | 네 |
| 문자열 | 패싯의 유형입니다. 값은 | 네 |
예시
예시
다음 예시는 sample_mflix.movies 컬렉션의 default라는 인덱스를 사용합니다. 컬렉션의 year 필드는 number 유형으로 인덱싱됩니다.
{ "mappings": { "dynamic": false, "fields": { "year": [ { "type": "number" } ] } } }
이 쿼리는 $searchMeta 단계를 사용하여 movies 컬렉션의 year 필드에서 1980 년부터 2000 년 사이의 영화를 검색하고 쿼리에 대한 메타데이터 결과를 조회합니다. 쿼리는 3개의 버킷을 지정합니다.
1980이 버킷에 대한 포괄적인 하한값19901980버킷에 대한 배타적 상한과 이 버킷에 대한 포괄적 하한입니다.20001990버킷에 대한 배타적 상한
이 쿼리는 또한 지정된 경계에 속하지 않는 쿼리 결과를 검색하기 위해 other이라는 이름의 default 버킷을 지정합니다.
1 db.movies.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "range": { 7 "path": "year", 8 "gte": 1980, 9 "lte": 2000 10 } 11 }, 12 "facets": { 13 "yearFacet": { 14 "type": "number", 15 "path": "year", 16 "boundaries": [1980,1990,2000], 17 "default": "other" 18 } 19 } 20 } 21 } 22 } 23 ])
이러한 결과에 대해 자세히 알아보려면 패싯 결과를 참조하세요.
날짜 패싯
중요
dateFacet 은 이제 구식입니다. 대신 날짜를 사용하여 향상된 패싯을 제공합니다.
패싯에 대해 업데이트된 필드 유형과 오래된 필드 유형 간의 차이점에 대해 자세히 알아보려면 패싯의 필드 유형 비교를 참조하세요.
날짜 패싯을 사용하면 날짜를 기준으로 검색 결과의 범위를 좁힐 수 있습니다. 배열이나 내장된 문서의 날짜를 패싯 경우 MongoDB Search는 일치하는 루트 문서 수를 기준으로 패싯 수를 반환합니다.
구문
날짜 패싯의 구문은 다음과 같습니다:
{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "date", "path" : "<field-path>", "boundaries" : <array-of-dates>, "default": "<bucket-name>", "embeddedDocument": { <embedded-document-scope> } // optional } } } } }
옵션
옵션 | 유형 | 설명 | 필수 사항입니다. |
|---|---|---|---|
| 숫자 배열 | 각 버킷의 경계를 지정하는 날짜 값 목록입니다. 다음을 지정해야 합니다:
각 인접한 값 쌍은 버킷의 포괄적인 하한과 배타적인 상한으로 작용합니다. | 네 |
| 문자열 | 지정된 경계에 속하지 않는 연산자 로부터 반환된 문서를 계산하는 추가 버킷의 이름입니다. 생략하면 MongoDB Search는 지정된 버킷에 속하지 않는 패싯 연산자 의 결과도 포함하지만, MongoDB 수에는 이러한 결과가 포함되지 않습니다. | no |
| 객체 | 쿼리 조건자와 일치하는 | no |
| 문자열 | 패싯을 설정할 필드 경로입니다. date 유형으로 인덱싱된 필드를 지정할 수 있습니다. | 네 |
| 문자열 | 패싯의 유형입니다. 값은 | 네 |
예시
예시
다음 예시는 sample_mflix.movies 컬렉션의 default라는 인덱스를 사용합니다. 컬렉션의 released 필드는 date 유형으로 인덱싱됩니다.
{ "mappings": { "dynamic": false, "fields": { "released": [ { "type": "date" } ] } } }
이 쿼리는 $searchMeta 단계를 사용하여 movies 컬렉션의 released 필드에서 2000 년부터 2015 년 사이의 영화를 검색하고 쿼리에 대한 메타데이터 결과를 조회합니다. 쿼리는 4개의 버킷을 지정합니다:
2000-01-01이 버킷에 대한 포괄적인 하한값2005-01-012000-01-01버킷에 대한 배타적 상한과 이 버킷에 대한 포괄적 하한입니다.2010-01-012005-01-01버킷에 대한 배타적 상한과 이 버킷에 대한 포괄적 하한입니다.2015-01-012010-01-01버킷에 대한 배타적 상한
이 쿼리는 또한 지정된 경계에 속하지 않는 쿼리 결과를 검색하기 위해 other이라는 이름의 default 버킷을 지정합니다.
1 db.movies.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "range": { 7 "path": "released", 8 "gte": ISODate("2000-01-01T00:00:00.000Z"), 9 "lte": ISODate("2015-01-31T00:00:00.000Z") 10 } 11 }, 12 "facets": { 13 "yearFacet": { 14 "type": "date", 15 "path": "released", 16 "boundaries": [ISODate("2000-01-01"), ISODate("2005-01-01"), ISODate("2010-01-01"), ISODate("2015-01-01")], 17 "default": "other" 18 } 19 } 20 } 21 } 22 } 23 ])
이러한 결과에 대해 자세히 알아보려면 패싯 결과를 참조하세요.
패싯의 필드 유형 비교
업데이트된 MongoDB 검색 필드 유형은 오래된 유형(stringFacet, numberFacet, dateFacet)에 비해 패싯을 지원하도록 개선된 기능을 제공합니다. 다음 표에는 기능의 주요 차이점이 간략하게 설명되어 있습니다.
패싯 범주 | 업데이트된 필드 유형 | 오래된 패싯 유형 | 주요 차이점 |
|---|---|---|---|
문자열 | stringFacet (오래됨) | Normalizer Support: The | |
숫자 | numberFacet (오래됨) | Array Support: The | |
날짜 | dateFacet (오래됨) | 배열 지원: |
참고
오래된 필드 유형과 업데이트된 필드 유형이 모두 동일한 필드에 대해 정의된 경우 오래된 패싯 유형이 우선합니다. 예시 를 들어 token 및 stringFacet 가 필드 에 대해 모두 정의된 경우 패싯 계산은 stringFacet 매핑을 사용합니다.
내장된 문서 배열의 일치하는 하위 항목에 대한 패싯
각 패싯 정의에는 쿼리 조건자와 일치하는 embeddedDocuments 배열의 하위 문서로만 패싯의 버킷 수를 제한하는 선택 사항인 embeddedDocument 필드가 포함될 수 있습니다. embeddedDocument 필드를 생략하면 패싯이 문서 인덱스됩니다.
embeddedDocument이 없으면 루트 문서는 해당 버킷에 속하는 하위 문서가 하나라도 있는 경우, 해당 하위 문서가 facet.operator 블록에 정의된 쿼리와 일치하지 않더라도 버킷에 포함됩니다. embeddedDocument 필드는 버킷 기여를 지정된 embeddedDocument.operator와 일치하는 하위 문서로만 제한합니다. 각 루트 문서를 버킷당 최대 한 번만 계산합니다.
embeddedDocument 필드는 다음 필드를 사용합니다.
필드 | 유형 | 설명 | 필수 사항입니다. |
|---|---|---|---|
| 문자열 | 패싯의 범위를 지정할 인덱스 | 네 |
| 객체 |
| 네 |
숫자 또는 날짜 패싯의 경우, 문서 인덱스 패싯과 동일한 규칙을 사용하여 default 버킷을 지정하면 해당 값이 구성된 boundaries 범위를 벗어나는 일치하는 하위 항목이 해당 버킷에 포함됩니다. 일치하는 하위 문서가 없는 루트 문서는 embeddedDocument범위의 패싯에는 기여하지 않지만, 동일한 쿼리에 있는 다른 범위가 지정되지 않은 패싯에는 여전히 기여할 수 있습니다.
중요
embeddedDocument범위의 패싯은 다른 여러 패싯 옵션과 결합할 수 없습니다. 자세한 내용은 제한 사항을 참조하세요.
예시는 Embedded-Scoped 패싯 예시.을 참조하세요.
패싯 집계
중요
패싯 집계는 미리 보기로 제공됩니다. 기능 및 관련 문서는 미리보기 기간 동안 언제든지 변경될 수 있습니다. 자세한 내용은 미리보기 기능을 참조하세요.
각 패싯 버킷에 대한 지표를 계산하려면 패싯 정의에 aggregations 문서를 추가합니다. MongoDB Search는 MongoDB Search 인덱스에서 지표를 계산하므로 파이프라인 뒷부분에서 $group 단계를 실행하는 것보다 훨씬 효율적입니다.
각 패싯 버킷에 대해, aggregations은 다음 값을 계산할 수 있습니다.
합계
평균
minimum
maximum
first
last
aggregations을 사용할 때는 다음을 수행해야 합니다.
각 지표에 대해
path에 지정한 필드를token,number또는date으로 인덱싱합니다.버킷 개수를 확인하려면
count지표를 명시적으로 포함하세요.중첩된 패싯의 리프 수준에서만
aggregations을(를) 지정하세요.중간 그룹화에 대한 지표를 계산하려면 해당 그룹화를
aggregations이(가) 포함된 별도의 최상위 패싯으로 지정하고 중첩된 패싯은 지정하지 마세요.
MongoDB Search는 MongoDB Search 인덱스에 있는 데이터에 대해 aggregations을 계산합니다. 이는 결국적으로 일관적인.
참고
메모리 요구 사항
aggregations 또는 중첩 패싯을 지정하는 패싯 쿼리는 다른 패싯 쿼리에 필요한 것보다 더 많은 메모리와 디스크를 MongoDB Search 인덱스에 요구합니다. 자세한 내용은 메모리 요구 사항을 참조하세요.
구문
aggregations 의 구문은 다음과 같습니다:
{ "$searchMeta": { "facet": { "facets": { "<facet-name>": { "type": "<facet-type>", "path": "<field-path>", "aggregations": { "<aggregation-name>": { "type": "sum" | "min" | "max" | "avg" | "first" | "last", "path": "<field-path>" } } } } } } }
aggregations 문서의 각 키는 사용자가 지정하는 집계 이름입니다. MongoDB Search는 사용자가 지정한 이름으로 버킷 문서의 각 집계를 반환합니다.
옵션
옵션 | 유형 | 설명 | 필수 사항입니다. |
|---|---|---|---|
| 문자열 | 지표를 계산할 필드 경로입니다. 이는 | 조건부 |
| 문자열 | 계산할 지표의 유형입니다. 값은 다음 중 하나일 수 있습니다:
각 지표 유형에 대해 자세히 알아보려면 지표 유형을 참조하세요. | 네 |
지표 유형
유형 | 필드 요구 사항 | 설명 |
|---|---|---|
| none | 버킷에 있는 문서 개수를 셉니다. 이 지표 유형에는 |
| 버킷에 있는 문서의 지정된 필드 값을 더합니다. | |
| 버킷에 있는 문서에 대해 지정된 필드 값의 평균을 반환합니다. 버킷의 어떤 문서에도 필드에 대한 값이 없으면 MongoDB Search는 | |
| none | 버킷 내 문서에 대해 지정된 필드의 최솟값을 반환합니다. |
| none | 버킷 내 문서에 대해 지정된 필드의 가장 높은 값을 반환합니다. |
| none | 쿼리 정렬 옵션이 정의하는 순서에 따라 버킷의 첫 번째 문서에 대해 지정된 필드의 값을 반환합니다. 쿼리에 정렬이 지정되지 않은 경우 순서는 임의적입니다. 정렬을 지정하는 방법을 학습하려면 MongoDB Search 결과 정렬을 참조하세요. |
| none | 쿼리 정렬 옵션에 정의된 순서에 따라 버킷의 마지막 문서에 대해 지정된 필드의 값을 반환합니다. 쿼리에 정렬이 지정되지 않은 경우 순서는 임의적입니다. 정렬을 지정하는 방법을 학습하려면 MongoDB Search 결과 정렬을 참조하세요. |
중요
min 및 max은(는) token을(를) 포함한 모든 필드 유형을 지원합니다. MongoDB Search가 이러한 지표를 계산할 때 필드가 지원되지 않는 유형으로 확인되는 문서는 건너뜁니다. MongoDB Search는 문서를 건너뛸 때 오류를 반환하지 않습니다. MongoDB Search가 버킷의 문서를 건너뛰었는지 확인하려면 동일한 aggregations 문서에 count 지표를 추가하고 예상되는 문서 수와 비교하십시오.
MongoDB Search가 건너뛰지 않는 값의 경우, min은 버킷에서 가장 작은 값을 선택하고 max은 가장 큰 값을 선택합니다. 값의 유형이 모두 동일하지 않은 경우, MongoDB Search는 BSON 유형 비교 순서를 적용하여 가장 작거나 큰 값을 결정합니다.
배열 고려 사항
각 지표 유형은 배열과 같이 둘 이상의 값으로 확인되는 필드를 다르게 처리하다.
sum그리고avg문서를 건너뛰세요.min그리고max은(는) 문서의 대표 요소로 사용할 배열에서 가장 낮은 값과 가장 높은 값을 선택합니다.first그리고last은(는) 모든 값을 배열로 반환합니다.
first 및 last의 경우, 반환된 배열은 다음 방식에서 원본 문서와 다릅니다.
값의 순서는 다를 수 있습니다. MongoDB Search는 인덱스에서 값을 읽는데, 이는 원본 문서의 순서를 유지하지 않습니다. 예를 들어, 문서에
["red", "blue", "green"]이 포함된 경우 MongoDB Search는["blue", "green", "red"]을 반환할 수 있습니다.MongoDB Search는 중복된 값의 인스턴스를 하나만 반환합니다.
MongoDB Search는 패싯을 지정할 수 없는 유형의 값을 포함하여 경로의 모든 값을 반환합니다. 예를 들어, 배열에 문자열과 불리언이 모두 포함된 경우 MongoDB Search는 문자열과 함께 불리언을 반환합니다.
소스 문서에 포함된 그대로 값을 반환하려면 인덱스 정의에서 필드에 대해 storedSource를 정의하고 쿼리에서 returnStoredSource를 true (으)로 설정합니다.
중첩 패싯
중요
중첩 패싯은 미리보기 상태입니다. 해당 기능과 관련 문서는 미리보기 기간 동안 언제든지 변경될 수 있습니다. 자세한 내용은 미리보기 기능을 참조하세요.
To group the documents in each bucket by additional fields, add a facets document to an existing facet definition. Each nested facet definition uses the same syntax as a top-level facet definition, so you can nest facets to build a tree of groupings. MongoDB Search returns the buckets for a nested facet inside each bucket of its parent facet.
For each bucket of a facet that contains a nested facet, MongoDB Search also returns a count field with the number of documents in the bucket. You don't need to specify a count metric for these intermediate buckets.
You can nest facets without limit on the number of levels. However, the following restrictions apply:
중첩된 패싯 트리에서 리프 패싯에만
aggregations을 지정할 수 있습니다.facets을 지정하는 패싯 정의는aggregations도 지정할 수 없습니다. 중간 그룹화에 대한 지표를 계산하려면 해당 그룹화를aggregations이 포함된 별도의 최상위 패싯으로 지정하고 중첩된 패싯은 지정하지 마세요.You can't name a nested facet
count. MongoDB Search reservescountfor the document count of intermediate buckets.쿼리가 반환할 수 있는 고유 버킷의 총 개수는
100000개를 초과할 수 없습니다. 하나의 패싯 트리가 생성하는 버킷을 계산하려면 중첩 분기의 각 수준에 있는 버킷 수를 곱하십시오. 수준의 버킷 수는 string 패싯의 경우numBuckets이고, 숫자 또는 날짜 패싯의 경우boundaries및default이 정의하는 버킷 수입니다. 예를 들어,20개의 버킷을 요청하고20개의 버킷을 요청하는 중첩 패싯을 포함하는 패싯은400개의 고유한 버킷을 생성합니다. 각 레벨이 이 합계를 곱하기 때문에 각 레벨에서 더 많은 버킷을 요청하면 중첩할 수 있는 레벨 수가 줄어듭니다.
패싯 결과
패싯 쿼리 의 경우 MongoDB Search는 정의된 패싯 이름을 결과의 해당 패싯 에 대한 버킷 배열 에 매핑합니다. 패싯 결과 문서 에는 패싯 에 대한 결과 버킷의 배열 인 buckets 옵션이 포함되어 있습니다. 배열 의 각 패싯 버킷 문서 에는 다음과 같은 필드가 있습니다.
옵션 | 유형 | 설명 |
|---|---|---|
| 객체 | 이 패싯 버킷을 식별하는 고유 식별자입니다. 이 값은 패싯 처리되는 데이터 형식과 일치합니다. |
| int | 이 패싯 버킷에 있는 문서 수입니다. |
If the facet definition specifies Facet Aggregations, each bucket document contains the metrics that you name in the aggregations document instead of the count field. If the facet definition specifies nested facets, each bucket document contains a count field with the number of documents in the bucket, and the results for the nested facet.
다중 선택 패싯
MongoDB Search를 사용하면 동일한 패싯 내의 여러 버킷을 동시에 보고 선택할 수 있습니다. 일반적으로 패싯 내에서 버킷을 선택하면 해당 선택 항목에 따라 검색 결과가 필터링되고 모든 패싯의 개수가 변경됩니다.
예시
sample_airbnb.listings 컬렉션 에 대한 인덱스 정의가 다음 필드에 대한 패싯을 지정한다고 가정해 보겠습니다.
cancellation_policyroom_typeaccommodates
cancellation_policy 패싯 에는 다음과 같은 버킷이 있습니다.
flexiblemoderatestrict_14_with_grace_periodsuper_strict_30super_strict_60
각 버킷에는 고유한 결과 개수가 있습니다. moderate cancellation_policy을(를) 검색하면 다른 4개 버킷의 개수가 0(으)로 이동합니다. 또한, room_type 및 accommodates 패슷의 버킷 개수는 각 버킷에 flexible cancellation_policy도 있는 결과의 수로 줄어들어요.
패싯이 검색 결과 수에 미치는 영향을 보다 세밀하게 제어해야 하는 시나리오에서는 패싯 쿼리에서 doesNotAffect 속성 사용하여 다중 선택 패싯을 활성화 . 이러한 패싯은 여전히 결과를 필터하다 하지만 쿼리 결과 수를 변경하지 않습니다.
다음 연산자에서 doesNotAffect을 지정할 수 있습니다.
여러 패싯을 제외하려면 패싯 이름의 배열을 지정합니다. 대부분의 사용 사례에서는 필터와 경로를 공유하는 패싯만 제외합니다. 예시, rating 필드의 equals 필터는 rating을(를) 경로로 사용하는 패싯의 이름을 지정합니다.
예시
sample_airbnb.listingsAndReviews 컬렉션에 대한 쿼리를 고려하여 moderate cancellation_policy를 가진 문서를 찾습니다. doesNotAffect 값을 cancellation_policy로 지정하면 cancellation_policy 패싯의 버킷 개수는 변경되지 않지만, 다른 패싯의 버킷 결과 개수는 각 버킷에 moderate cancellation_policy도 있는 결과의 수로 줄어듭니다.
자세한 내용은 다중 선택 패싯 예시참조하세요.
doesNotAffect을(를) embeddedDocument범위의 패싯과 결합할 수 없습니다. 자세한 내용은 내장된 문서 배열의 일치하는 하위 항목에 대한 패싯을 참조하세요.
마지막으로 패싧이 많은 사용 사례의 경우, 특정 패싧에 영향을 미치는 다른 필터를 제한할 수 있습니다. 다른 필드의 패싧을 포함하여 모든 필터의 doesNotAffect 속성에서 패싧을 지정함으로써 이 작업을 수행할 수 있습니다. 이를 통해 어떤 선택이 옵션의 폭을 더 많이 또는 더 적게 족히는지 한눈에 확인할 수 있습니다.
예시
sample_airbnb.listingsAndReviews 컬렉션에 대한 쿼리를 고려하여 accommodates 값이 3인 문서를 찾습니다. doesNotAffect 값을 cancellation_policy로 지정하면 room_type 버킷의 결과 수는 3 명을 수용하는 각 버킷의 결과 수로 줄어들지만 cancellation_policy의 버킷에 대한 결과 수는 영향을 받지 않습니다.
자세한 내용은 패싯 간 필터 제외 예시를 참조하세요.
SEARCH_META 집계 변수
$search 단계를 사용하여 쿼리를 실행하면 MongoDB Search는 메타데이터 결과를 $$SEARCH_META 변수에 저장하고 검색 결과만 반환합니다. 지원되는 모든 집계 파이프라인 단계에서 $$SEARCH_META 변수를 사용하여 $search 쿼리에 대한 메타데이터 결과를 볼 수 있습니다. $$SEARCH_META 변수를 패싯.집계.와 함께 사용할 수도 있습니다.
MongoDB는 검색 결과와 메타데이터 결과가 모두 필요한 경우에만 $$SEARCH_META 변수를 사용할 것을 권장합니다. 해당 경우가 아니면 다음을 사용하세요.
$search검색 결과만 표시하는 단계.$searchMeta메타데이터 결과만 표시하는 단계.
제한 사항
단일 필드에 대해서만 패싯 쿼리를 실행할 수 있습니다. 필드 그룹에 대해서는 패싯 쿼리를 실행할 수 없습니다.
임베디드 범위 패싯에 대한 제한 사항
다음 제한은 내장된 문서 배열의 일치하는 하위 요소에 대한 패싯:에 적용됩니다.
동일 쿼리에서 최상위
returnScope옵션과embeddedDocument범위의 패슷을 결합할 수 없습니다.embeddedDocument범위 패슷은 개수만 반환합니다.동일한 쿼리에서 드릴 사이드웨이 패싯(
doesNotAffect)과embeddedDocument범위의 패싯을 결합할 수 없습니다.
패싯 집계에 대한 제한 사항
패싯 집계:에는 다음과 같은 제한 사항이 적용됩니다.
aggregations에서는 다음 옵션을 사용할 수 없습니다.doesNotAffect다중 선택 패싯의 경우
다음 BSON types에 대해서는 패싯을 지정하거나 집계를 계산할 수 없습니다.
binDatabooldecimalnullobjectIdtimestamp
이러한 유형에 대해 지표를 계산하려면 뷰를 사용하여 필드를 인덱싱하기 전에 지원되는 유형으로 변환하세요.
예시
다음 예시에서는 샘플 데이터를 사용합니다. 메타데이터 결과 예시에서는 $searchMeta 을 사용하여 쿼리를 facet 실행해 결과에서 메타데이터만 조회하는 방법을 보여 줍니다. 메타데이터 및 검색 결과 예시에서는 $search 쿼리를 facet 및 $SEARCH_META 집계 변수를 사용하여 검색 및 메타데이터 결과를 모두 조회하는 방법을 보여 줍니다. returnScope 예시는 embeddedDocuments 유형을 사용하여 동적으로 인덱싱된 객체 배열의 중첩 필드에 대해 패싯을 적용하는 방법을 보여줍니다. 임베디드 범위 패싯 예시는 embeddedDocuments 배열의 일치하는 하위 항목에 대해서만 패싯을 적용하는 방법을 보여줍니다. 다중 선택 및 패싯 간 필터 제외 예시는 doesNotAffect를 사용하여 패싯이 서로의 개수에 영향을 미치는 방식을 제어하는 방법을 보여줍니다. 집계 예시는 각 패싯 버킷에 대한 지표를 계산하는 방법을 보여주고, 중첩 패싯 예시는 결과를 두 번째 필드로 그룹화하고 각 버킷에 대한 지표를 계산하는 방법을 보여줍니다.
학습 계속하기
자세한 학습은 MongoDB 검색에서 패싯을 사용하는 방법을 참조하세요.
교육 과정과 동영상을 통해 MongoDB Search의( MongoDB Search facet 연산자)에 대해자세히 학습 수 있습니다.
교육 과정으로 배우기
MongoDB Search에서 패싯을 사용하는 방법에 대해 자세히 학습하려면 MongoDB University 의 Intro To MongoDB 과정의 단원 9 을 수강하세요. 1.5 시간 단위로, MongoDB Search에 대한 개요와 MongoDB Search 인덱스 만들기, 복합 연산자를 사용한 $search 쿼리 실행, facet를 사용한 결과 그룹화에 대한 강의가 포함되어 있습니다.
보면서 배우기
이 동영상을 보고 쿼리에서 숫자와 string facet (MongoDB Search 연산자) 를 만들고 사용하여 결과를 그룹하고 그룹 내 결과의 개수를 조회하는 방법을 학습합니다.
소요 시간: 11분