문서 메뉴
문서 홈
/
MongoDB 아틀라스
/ / / /

한 면

이 페이지의 내용

  • 호환성
  • 정의
  • 구문
  • 필드
  • 패싯 정의
  • 문자열 패싯
  • 숫자 패싯
  • 날짜 패싯
  • 패싯 결과
  • SEARCH_META 애그리게이션 변수
  • 제한 사항
  • 예제

facet 은 다음 버전 중 하나를 실행하는 Atlas 클러스터에서만 사용할 수 있습니다.

  • MongoDB 5.0.4+

  • MongoDB 6.0+

  • MongoDB 7.0+

    참고

    샤딩된 컬렉션에 대해 패싯 쿼리를 실행하려면 클러스터에서 MongoDB v6.0 이상을 실행해야 합니다.

explain이 있는 facet 쿼리는 실행할 수 없습니다.

facet

facet 수집기는 지정된 패싯 필드의 값 또는 범위별로 결과를 그룹화하고 해당 그룹 각각의 개수를 반환합니다.

$search$searchMeta 단계 모두에서 facet 을 사용할 수 있습니다. MongoDB는 $searchMeta 단계와 함께 facet 을 사용하여 쿼리에 대한 메타데이터 결과만 검색할 것을 권장합니다. $search 단계를 사용하여 메타데이터 결과 및 쿼리 결과를 검색하려면 $$SEARCH_META 애그리게이션 변수를 사용해야 합니다. 자세한 내용은 SEARCH_META 애그리게이션 변수 를 참조하세요.

facet 의 구문은 다음과 같습니다:

{
"$searchMeta"|"$search": {
"index": <index name>, // optional, defaults to "default"
"facet": {
"operator": {
<operator-specifications>
},
"facets": {
<facet-definitions>
}
}
}
}
필드
유형
필수 사항입니다.
설명
facets
문서
각 패싯의 데이터를 버킷에 넣기 위한 정보입니다. 패싯 정의는 하나 이상 지정해야 합니다.
operator
문서
아니
패싯을 수행하는 데 사용하는 연산자 입니다. 이를 생략하면 Atlas Search가 컬렉션의 모든 문서에 대해 패싯을 수행합니다.

패싯 정의 문서는 패싯 이름과 패싯 유형에 특정한 옵션을 포함하고 있습니다. Atlas Search는 다음 유형의 패싯을 지원합니다:

문자열 패싯을 사용하면 지정된 문자열 필드에서 가장 빈번한 문자열 값을 기반으로 Atlas Search 결과의 범위를 좁힐 수 있습니다. 문자열 필드는 stringFacet 으로 인덱싱되어야 합니다. 내장된 문서의 문자열 필드를 패싯하려면 상위 필드도 문서 유형으로 인덱싱해야 합니다.

참고

포함된 문서 내의 문자열 필드에 패싯을 지정하면 Atlas Search에서 일치하는 상위 문서의 수에 대해서만 패싯 수를 반환합니다.

문자열 패싯의 구문은 다음과 같습니다:

{
"$searchMeta": {
"facet":{
"operator": {
<operator-specification>
},
"facets": {
"<facet-name>" : {
"type" : "string",
"path" : "<field-path>",
"numBuckets" : <number-of-categories>,
}
}
}
}
}
옵션
유형
설명
필수 사항입니다.
numBuckets
int
결과에 반환할 패싯 카테고리의 최대 개수입니다. 값은 1000보다 작거나 같아야 합니다. 지정한 경우, 데이터가 요청된 수보다 적은 카테고리로 그룹화됐다면 Atlas Search는 요청된 것보다 적은 카테고리를 반환할 수 있습니다. 생략하면 기본값은 10 으로, Atlas Search는 개수 기준으로 상위 10 패싯 범주만 반환합니다.
아니
path
문자열
패싯을 설정할 필드 경로입니다. stringFacet으로 인덱싱되는 필드를 지정할 수 있습니다.
type
문자열
패싯의 유형입니다. 값은 string이어야 합니다.

예제

다음 예제에서는 sample_mflix.movies컬렉션의 default 인덱스를 사용합니다. 컬렉션의 genres 필드는 stringFacet 유형으로 인덱싱되고 year 필드는 숫자 유형으로 인덱싱됩니다.

{
"mappings": {
"dynamic": false,
"fields": {
"genres": {
"type": "stringFacet"
},
"year": {
"type": "number"
}
}
}
}

이 쿼리는 $searchMeta 단계를 사용하여 movies 컬렉션의 year 필드에서 2000년부터 2015년까지의 영화를 검색하고 각 장르의 영화 수 개수를 검색합니다.

db.movies.aggregate([
{
"$searchMeta": {
"facet": {
"operator": {
"range": {
"path": "year",
"gte": 2000,
"lte": 2015
}
},
"facets": {
"genresFacet": {
"type": "string",
"path": "genres"
}
}
}
}
}
])

이 쿼리는 다음과 같은 결과를 반환합니다:

[
{
count: { lowerBound: Long("13718") },
facet: {
genresFacet: {
buckets: [
{ _id: 'Drama', count: Long("7759") },
{ _id: 'Comedy', count: Long("3937") },
{ _id: 'Romance', count: Long("1916") },
{ _id: 'Thriller', count: Long("1705") },
{ _id: 'Documentary', count: Long("1703") },
{ _id: 'Action', count: Long("1558") },
{ _id: 'Crime', count: Long("1475") },
{ _id: 'Adventure', count: Long("1111") },
{ _id: 'Horror', count: Long("1008") },
{ _id: 'Biography', count: Long("877") }
]
}
}
}
]

이러한 결과에 대해 자세히 알아보려면 패싯 결과를 참조하세요.

숫자 패싯은 결과를 숫자의 별도 범위로 나누어 검색 결과 내의 숫자 값 빈도를 파악할 수 있게 합니다.

참고

제한 사항

내장된 문서의 숫자 필드에는 패싯을 사용할 수 없습니다.

숫자 패싯의 구문은 다음과 같습니다:

{
"$searchMeta": {
"facet":{
"operator": {
<operator-specification>
},
"facets": {
"<facet-name>" : {
"type" : "number",
"path" : "<field-path>",
"boundaries" : <array-of-numbers>,
"default": "<bucket-name>"
}
}
}
}
}
옵션
유형
설명
필수 사항입니다.
boundaries
숫자 배열

각 버킷의 경계를 지정하는 숫자 값의 오름차순 목록입니다. 경계를 두 개 이상 지정해야 합니다. 각 인접한 값 쌍은 버킷의 포괄적인 하한과 배타적인 상한으로 작용합니다. 다음 BSON 유형의 값을 원하는 대로 조합하여 지정할 수 있습니다:

  • 32비트 정수 (int32)

  • 64비트 정수 (int64)

  • 64비트 이진 부동 소수점(double)

default
문자열
지정된 경계에 속하지 않는 연산자로부터 반환된 문서를 계산하는 추가 버킷의 이름입니다. 이를 생략하면 Atlas Search는 지정된 버킷에 포함되지 않는 패싯 연산자의 결과도 포함하지만, 버킷 계산에는 포함하지 않습니다.
아니
path
문자열
패싯을 설정할 필드 경로입니다. numberFacet 유형으로 인덱싱되는 필드를 지정할 수 있습니다.
type
문자열
패싯의 유형입니다. 값은 number이어야 합니다.

예제

다음 예제에서는 sample_mflix.movies 컬렉션의 default 인덱스를 사용합니다. 컬렉션의 year 필드는 numberFacet숫자 유형으로 인덱싱됩니다.

{
"mappings": {
"dynamic": false,
"fields": {
"year": [
{
"type": "numberFacet"
},
{
"type": "number"
}
]
}
}
}

이 쿼리는 $searchMeta 단계를 사용하여 movies 컬렉션의 year 필드에서 1980년부터 2000년 사이의 영화를 검색하고 쿼리에 대한 메타데이터 결과를 검색합니다. 쿼리는 3개의 버킷을 지정합니다.

  • 1980이 버킷에 대한 포괄적인 하한값

  • 19901980 버킷에 대한 배타적 상한과 이 버킷에 대한 포괄적 하한입니다.

  • 20001990 버킷에 대한 배타적 상한

이 쿼리는 또한 지정된 경계에 속하지 않는 쿼리 결과를 검색하기 위해 other이라는 이름의 default 버킷을 지정합니다.

db.movies.aggregate([
{
"$searchMeta": {
"facet": {
"operator": {
"range": {
"path": "year",
"gte": 1980,
"lte": 2000
}
},
"facets": {
"yearFacet": {
"type": "number",
"path": "year",
"boundaries": [1980,1990,2000],
"default": "other"
}
}
}
}
}
])

이 쿼리는 다음과 같은 결과를 반환합니다:

[
{
count: { lowerBound: Long('6095') },
facet: {
yearFacet: {
buckets: [
{ _id: 1980, count: Long('1956') },
{ _id: 1990, count: Long('3558') },
{ _id: 'other', count: Long('581') }
]
}
}
}
]

이러한 결과에 대해 자세히 알아보려면 패싯 결과를 참조하세요.

날짜 패싯을 사용하면 날짜를 기준으로 검색 결과의 범위를 좁힐 수 있습니다.

참고

제한 사항

내장된 문서의 날짜 필드에는 패싯을 사용할 수 없습니다.

날짜 패싯의 구문은 다음과 같습니다:

{
"$searchMeta": {
"facet":{
"operator": {
<operator-specification>
},
"facets": {
"<facet-name>" : {
"type" : "date",
"path" : "<field-path>",
"boundaries" : <array-of-dates>,
"default": "<bucket-name>"
}
}
}
}
}
옵션
유형
설명
필수 사항입니다.
boundaries
숫자 배열

각 버킷의 경계를 지정하는 날짜 값 목록입니다. 다음을 지정해야 합니다:

  • 최소 두 개의 경계

  • 값이 오름차순으로 표시되며 가장 빠른 날짜가 먼저 표시됩니다.

각 인접한 값 쌍은 버킷의 포괄적인 하한과 배타적인 상한으로 작용합니다.

default
문자열
지정된 경계에 속하지 않는 연산자로부터 반환된 문서를 계산하는 추가 버킷의 이름입니다. 이를 생략하면 Atlas Search는 지정된 버킷에 포함되지 않는 패싯 연산자의 결과도 포함하지만, 버킷 계산에는 포함하지 않습니다.
아니
path
문자열
패싯을 설정할 필드 경로입니다. dateFacet 유형으로 인덱싱되는 필드를 지정할 수 있습니다.
type
문자열
패싯의 유형입니다. 값은 date이어야 합니다.

예제

다음 예시에서는 sample_mflix.movies 컬렉션의 default 인덱스를 사용합니다. 컬렉션의 released 필드는 dateFacet날짜 유형으로 인덱싱됩니다.

{
"mappings": {
"dynamic": false,
"fields": {
"released": [
{
"type": "dateFacet"
},
{
"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 버킷을 지정합니다.

db.movies.aggregate([
{
"$searchMeta": {
"facet": {
"operator": {
"range": {
"path": "released",
"gte": ISODate("2000-01-01T00:00:00.000Z"),
"lte": ISODate("2015-01-31T00:00:00.000Z")
}
},
"facets": {
"yearFacet": {
"type": "date",
"path": "released",
"boundaries": [ISODate("2000-01-01"), ISODate("2005-01-01"), ISODate("2010-01-01"), ISODate("2015-01-01")],
"default": "other"
}
}
}
}
}
])

이 쿼리는 다음과 같은 결과를 반환합니다:

[
{
count: { lowerBound: Long('11922') },
facet: {
yearFacet: {
buckets: [
{
_id: ISODate('2000-01-01T00:00:00.000Z'),
count: Long('3028')
},
{
_id: ISODate('2005-01-01T00:00:00.000Z'),
count: Long('3953')
},
{
_id: ISODate('2010-01-01T00:00:00.000Z'),
count: Long('4832')
},
{ _id: 'other', count: Long('109') }
]
}
}
}
]

이러한 결과에 대해 자세히 알아보려면 패싯 결과를 참조하세요.

패싯 쿼리의 경우 Atlas Search는 정의된 패싯 이름을 결과의 해당 패싯에 대한 버킷 배열에 매핑합니다. 패싯 결과 문서에는 패싯에 대한 결과 버킷의 배열인 buckets 옵션이 포함되어 있습니다. 배열의 각 패싯 버킷 문서에는 다음과 같은 필드가 있습니다.

옵션
유형
설명
_id
객체
이 패싯 버킷을 식별하는 고유 식별자입니다. 이 값은 패싯 처리되는 데이터 형식과 일치합니다.
count
int
이 패싯 버킷에 있는 문서의 개수입니다. count 필드에 대해 자세히 알아보려면 Atlas Search Results 수량을 참조하세요.

$search 단계를 사용하여 쿼리를 실행하면 Atlas Search는 메타데이터 결과를 $$SEARCH_META 변수에 저장하고 검색 결과만 반환합니다. 지원되는 모든 집계 파이프라인 단계에서 $$SEARCH_META 변수를 사용하여 $search 쿼리에 대한 메타데이터 결과를 볼 수 있습니다.

MongoDB는 검색 결과와 메타데이터 결과가 모두 필요한 경우에만 $$SEARCH_META 변수를 사용할 것을 권장합니다. 해당 경우가 아니면 다음을 사용하세요.

  • $search 검색 결과만 표시하는 단계.

  • $searchMeta 메타데이터 결과만 표시하는 단계.

다음과 같은 제한 사항이 적용됩니다:

  • 단일 필드에 대해서만 패싯 쿼리를 실행할 수 있습니다. 필드 그룹에 대해서는 패싯 쿼리를 실행할 수 없습니다.

  • MongoDB v6.0을 실행하는 클러스터에서만 샤딩된 컬렉션에 대해 패싯 쿼리를 실행할 수 있습니다.

다음 예제에서는 sample_mflix.movies 컬렉션을 사용합니다. 메타데이터 결과 예제에서는 facet을 사용하여 $searchMeta 쿼리를 실행해 결과에서 메타데이터만 조회하는 방법을 보여 줍니다. 메타데이터 및 검색 결과 예제에서는 facet$SEARCH_META 애그리게이션 변수를 사용하여 $search 쿼리를 실행해 검색 및 메타데이터 결과를 모두 조회하는 방법을 보여 줍니다.

이러한 결과에 대해 자세히 알아보려면 패싯 결과를 참조하세요.

← 이 존재합니다