Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

Atlas Search 결과 정렬

이 페이지의 내용

  • 구문
  • 옵션
  • 집계 결과
  • SEARCH_META 집계 변수
  • 예시

Atlas Search count 옵션은 쿼리에 대한 검색 결과 수를 표시하는 필드를 메타데이터 결과 문서에 추가합니다. count를 사용하여 결과 집합의 크기를 결정할 수 있습니다. $search 또는 $searchMeta 단계에서 사용할 수 있습니다. 연산자 또는 수집기와 함께 사용하여 총 문서 수 또는 쿼리와 일치하는 문서 수의 하한을 표시해야 합니다.

참고

샤딩된 컬렉션에 count 옵션을 사용하려면 클러스터에서 MongoDB v6.0 이상을 실행해야 합니다. MongoDB v7.2.0을 실행하는 샤딩된 Atlas 클러스터에서 $searchMetacount에 대한 오류를 반환할 수 있습니다.

MongoDB는 count$searchMeta 단계와 함께 사용하여 쿼리에 대한 메타데이터 결과만 조회할 것을 권장합니다. $search 단계를 사용하여 메타데이터 결과 및 쿼리 결과를 조회하려면 $$SEARCH_META 변수를 사용해야 합니다. 자세히 알아보려면 SEARCH_META 집계 변수를 참조하세요.

참고

설명 모드에서 count 로 실행된 쿼리에 대한 결과에 count 결과가 포함되지 않습니다.

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

{
"$searchMeta"|"$search": {
"index": "<index name>", // optional, defaults to "default"
"<operator>": {
<operator-specifications>
},
"count": {
"type": "lowerBound"|"total",
"threshold": <number-of-documents> //optional
}
}
}
필드
유형
설명
필수 사항입니다.
type
문자열

결과 집합에 포함된 문서의 개수 유형입니다. 값은 다음 중 하나일 수 있습니다:

  • lowerBound - 쿼리와 일치하는 문서 수의 하한값을 확인할 수 있습니다. 하한값으로 threshold을 설정할 수 있습니다.

  • total - 를 입력하면 쿼리와 일치하는 문서 수를 정확하게 계산할 수 있습니다. 결과 집합이 큰 경우 Atlas 검색에서 lowerBound 개수를 반환하는 데 시간이 더 오래 걸릴 수 있습니다.

생략하는 경우 기본값은 lowerBound입니다.

no
threshold
int
typelowerBound인 경우 정확한 개수에 포함할 문서 수입니다. 생략할 경우 기본값은 1000이며, 이는 1000까지의 숫자는 정확한 개수이고 1000을 초과하는 숫자는 결과에 포함된 문서 수에 대한 대략적인 개수임을 나타냅니다.
no

결과 문서에 포함된 개수 문서에는 다음과 같은 정수 필드가 포함되어 있습니다.

옵션
설명
lowerBound
이 결과 세트의 하한값입니다. 이는 type 옵션을 생략하고 lowerBound 유형의 count를 명시적으로 요청하는 경우 기본적으로 반환됩니다.
total
이 결과 집합의 총 개수입니다. 이 값은 total 유형의 개수가 요청된 경우에만 반환됩니다.

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

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

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

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

예시

sample_mflix.movies 컬렉션의 released 필드에 인덱스가 있다고 가정해 보겠습니다.

{
"mappings": {
"dynamic": false,
"fields": {
"released": {
"type": "date"
}
}
}
}

다음 쿼리는 movies 컬렉션에서 2011년 9월 1일 근처에 개봉된 영화를 검색합니다. 이 쿼리는 결과의 총 개수를 요청합니다. 쿼리에는 다음이 포함됩니다:

샘플 쿼리는 다음 단계를 사용합니다.

movies 컬렉션 에서 01, 2011 9월 근처에 개봉된 영화를 검색합니다. 이 쿼리는 genres 필드에 대한 결과의 총 개수와 메타데이터를 요청합니다.
문서에서 titlereleased 필드를 제외한 모든 필드를 제외하고 $$SEARCH_META 변수에 저장된 메타데이터 결과를 meta 필드 값으로 포함합니다.
출력을 2 문서로 제한합니다.
db.movies.aggregate([
{
"$search": {
"near": {
"path": "released",
"origin": ISODate("2011-09-01T00:00:00.000+00:00"),
"pivot": 7776000000
},
"count": {
"type": "total"
}
}
},
{
"$project": {
"meta": "$$SEARCH_META",
"title": 1,
"released": 1
}
},
{
"$limit": 2
}
])
{
"_id" : ObjectId("573a13c3f29313caabd6b025"),
"title" : "Submarino",
"released" : ISODate("2011-09-01T00:00:00Z"),
"meta" : {
"count" : { "total" : NumberLong(23026) }
}
}
{
"_id" : ObjectId("573a13c7f29313caabd748f7"),
"title" : "Devil's Playground",
"released" : ISODate("2011-09-01T00:00:00Z"),
"meta" : {
"count" : { "total" : NumberLong(23026) }
}
}

sample_mflix.movies 컬렉션 의 releasedgenres 필드에 대한 인덱스 가 있다고 가정합니다.

{
"mappings": {
"dynamic": false,
"fields": {
"genres": {
"type": "stringFacet"
},
"released": {
"type": "date"
}
}
}
}

샘플 쿼리는 다음 단계를 사용합니다.

movies 컬렉션 에서 01, 2011 9월 근처에 개봉된 영화를 검색합니다. 이 쿼리는 genres 필드에 대한 결과의 총 개수와 메타데이터를 요청합니다.
출력을 2 문서로 제한합니다.
title, releasedgenres 을 제외한 모든 필드를 문서에서 제외하고 $$SEARCH_META 변수에 저장된 메타데이터 결과를 문서의 meta 배열 내부에 포함하여 $search 결과를 처리합니다.
db.movies.aggregate([
{
"$search": {
"facet": {
"operator": {
"near": {
"path": "released",
"origin": ISODate("2011-09-01T00:00:00.000+00:00"),
"pivot": 7776000000
}
},
"facets": {
"genresFacet": {
"type": "string",
"path": "genres"
}
}
},
"count": {
"type": "total"
}
}
},
{
"$limit": 2
},
{
"$facet": {
"results": [
{ "$project":
{
"title": 1,
"released": 1,
"genres": 1
}
}
],
"meta": [
{"$replaceWith": "$$SEARCH_META"},
{"$limit": 1}
]
}
}
])
[
{
results: [
{
_id: ObjectId('573a13c3f29313caabd6b025'),
genres: [ 'Drama' ],
title: 'Submarino',
released: ISODate('2011-09-01T00:00:00.000Z')
},
{
_id: ObjectId('573a13c7f29313caabd748f7'),
genres: [ 'Action', 'Horror' ],
title: "Devil's Playground",
released: ISODate('2011-09-01T00:00:00.000Z')
}
],
meta: [
{
count: { total: Long('20878') },
facet: {
genresFacet: {
buckets: [
{ _id: 'Drama', count: Long('12149') },
{ _id: 'Comedy', count: Long('6436') },
{ _id: 'Romance', count: Long('3274') },
{ _id: 'Crime', count: Long('2429') },
{ _id: 'Thriller', count: Long('2400') },
{ _id: 'Action', count: Long('2349') },
{ _id: 'Adventure', count: Long('1876') },
{ _id: 'Documentary', count: Long('1755') },
{ _id: 'Horror', count: Long('1432') },
{ _id: 'Biography', count: Long('1244') }
]
}
}
}
]
}
]

결과에 대해 자세히 알아보려면 Count 결과를 참조하세요.

다음 예시에서는 sample_mflix.movies 컬렉션의 year 필드에 대한 인덱스를 사용합니다:

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

다음 쿼리는 movies 컬렉션에서 2010~2015년 사이에 나온 영화를 검색합니다. 쿼리는 결과의 하한 개수를 요청합니다.

db.movies.aggregate([
{
"$searchMeta": {
"range": {
"path": "year",
"gte": 2010,
"lte": 2015
},
"count": {
"type": "lowerBound"
}
}
}
])

Atlas Search가 반환하는 결과:

{ "count" : { "lowerBound" : NumberLong(1001) } }

다음 쿼리는 movies 컬렉션에서 2010년과 2015년 사이의 영화를 검색합니다. 이 쿼리는 결과의 총 개수를 요청합니다.

db.movies.aggregate([
{
"$searchMeta": {
"range": {
"path": "year",
"gte": 2010,
"lte": 2015
},
"count": {
"type": "total"
}
}
}
])

Atlas Search가 반환하는 결과:

{ "count" : { "total" : NumberLong(5971) } }

결과에 대해 자세히 알아보려면 Count 결과를 참조하세요.

돌아가기

3. 검색어 강조 표시