Atlas Search 결과 정렬
이 페이지의 내용
Atlas Search count
옵션은 쿼리에 대한 검색 결과 수를 표시하는 필드를 메타데이터 결과 문서에 추가합니다. count
를 사용하여 결과 집합의 크기를 결정할 수 있습니다. $search 또는 $searchMeta
단계에서 사용할 수 있습니다. 연산자 또는 수집기와 함께 사용하여 총 문서 수 또는 쿼리와 일치하는 문서 수의 하한을 표시해야 합니다.
참고
샤딩된 컬렉션에 count
옵션을 사용하려면 클러스터에서 MongoDB v6.0 이상을 실행해야 합니다. MongoDB v7.2.0을 실행하는 샤딩된 Atlas 클러스터에서 $searchMeta
는 count
에 대한 오류를 반환할 수 있습니다.
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 | 문자열 | 결과 집합에 포함된 문서의 개수 유형입니다. 값은 다음 중 하나일 수 있습니다:
생략하는 경우 기본값은 | no |
threshold | int | type 이 lowerBound 인 경우 정확한 개수에 포함할 문서 수입니다. 생략할 경우 기본값은 1000 이며, 이는 1000 까지의 숫자는 정확한 개수이고 1000 을 초과하는 숫자는 결과에 포함된 문서 수에 대한 대략적인 개수임을 나타냅니다. | no |
집계 결과
결과 문서에 포함된 개수 문서에는 다음과 같은 정수 필드가 포함되어 있습니다.
SEARCH_META
집계 변수
$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 필드에 대한 결과의 총 개수와 메타데이터를 요청합니다. | |
문서에서 title 및 released 필드를 제외한 모든 필드를 제외하고 $$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
컬렉션 의 released
및 genres
필드에 대한 인덱스 가 있다고 가정합니다.
{ "mappings": { "dynamic": false, "fields": { "genres": { "type": "stringFacet" }, "released": { "type": "date" } } } }
샘플 쿼리는 다음 단계를 사용합니다.
movies 컬렉션 에서 01, 2011 9월 근처에 개봉된 영화를 검색합니다. 이 쿼리는 genres 필드에 대한 결과의 총 개수와 메타데이터를 요청합니다. | |
출력을 2 문서로 제한합니다. | |
title , released 및 genres 을 제외한 모든 필드를 문서에서 제외하고 $$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 결과를 참조하세요.