Docs Menu
Docs Home
/
MongoDB Atlas
/ / /

쿼리 결과 페이지 매기기 방법

이 페이지의 내용

  • 정적 매핑으로 Atlas Search 인덱스 생성
  • 필수 역할
  • 절차
  • 쿼리 실행 및 결과 페이지 매기기
  • 절차
  • 페이지 1 조회 및 페이지 매김 토큰 생성
  • Retrieve Page 2 Using searchAfter
  • 다음을 사용하여 1페이지로 돌아가기 searchBefore
  • searchAfter$skip을 사용하여 2페이지에서 5페이지로 이동
  • 페이지화된 결과에 패싯 사용

이 튜토리얼은 애플리케이션에서 '다음 페이지' 및 '이전 페이지'와 같은 기능을 구축하기 위해 Atlas Search 쿼리 결과를 페이지 매김하는 방법을 보여줍니다. 또한 $skip$limit를 사용하여 페이지 간에 이동하는 방법을 보여줍니다. 이 튜토리얼에서는 다음 단계를 안내합니다.

  1. sample_mflix.movies 컬렉션에 대한 정적 매핑을 사용하여 Atlas Search 인덱스를 설정합니다.

  2. 인덱싱된 필드에 대해 Atlas Search 쿼리를 실행하면 순차적 결과가 반환되며, 이를 통해 다음을 수행할 수 있습니다.

    • '다음 페이지', '이전 페이지'와 같은 기능을 빌드하기 위해 페이지를 순회합니다.

    • 2페이지에서 5페이지로 이동하고 결과에서 페이지를 건너뜁니다.

    • 결과에서 각 장르의 총 영화 수 개수를 조회합니다.

시작하기 전에 Atlas 클러스터가 필수 구성 요소에 설명된 요건을 충족하는지 확인하세요.

참고

Atlas Search $search searchSequenceToken을 사용하여 순차적 결과를 검색하려면 Atlas 클러스터는 MongoDB v6.0.13+ 또는 v7.0.5+를 실행해야 합니다.

이 섹션에서는 sample_mflix.movies 컬렉션의 필드를 인덱싱하기 위해 정적 매핑을 사용하는 Atlas Search 인덱스를 만듭니다.

Atlas Search 인덱스를 생성하려면 프로젝트에 대한 Project Data Access Admin 이상의 액세스 권한이 있어야 합니다.

1
  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters 클릭하세요.

    Clusters(클러스터) 페이지가 표시됩니다.

2

사이드바, Data Explorer 또는 클러스터 세부 정보 페이지에서 Atlas Search 페이지로 이동할 수 있습니다.

  1. 사이드바에서 Services 제목 아래의 Atlas Search를 클릭합니다.

  2. Select data source 드롭다운에서 클러스터를 선택하고 Go to Atlas Search를 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. cluster의 Browse Collections 버튼을 클릭합니다.

  2. 데이터베이스를 확장하고 컬렉션을 선택합니다.

  3. 컬렉션의 Search Indexes 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

  1. 클러스터 이름을 클릭합니다.

  2. Atlas Search 탭을 클릭합니다.

    Atlas Search 페이지가 표시됩니다.

3
4
  • 안내를 따라 진행하고자 할 때는 Atlas Search Visual Editor를 선택합니다.

  • 원시 인덱스 정의를 편집하고 싶다면, Atlas Search JSON Editor을 선택합니다.

5
  1. Index Name 필드에 pagination-tutorial를 입력합니다.

  2. Database and Collection 섹션에서 sample_mflix 데이터베이스를 찾고 movies 컬렉션을 선택합니다.

6

다음 인덱스 정의는 다음 필드에 대한 인덱스를 구성합니다.

  • title 필드에 대한 전체 텍스트 검색을 위한 string 유형

  • genres 는 필드에 대한 패싯 검색을 위한 stringFacet 유형

  • released 필드를 사용하여 결과를 정렬하기 위한 날짜 유형으로 필드 사용

Atlas 사용자 인터페이스에서 Atlas Search Visual Editor 또는 Atlas Search JSON Editor를 사용하여 인덱스를 생성할 수 있습니다.

  1. Next를 클릭합니다.

  2. Refine Your Index를 클릭합니다.

  3. Index Configurations 섹션에서 Dynamic Mapping을 비활성화하도록 토글합니다.

  4. Field Mappings 섹션에서 Add Field를 클릭하고, Add Field MappingCustomized Configuration 탭에서 다음 필드에 대한 설정을 하나씩 구성한 후 Add를 클릭합니다.

    필드 이름
    데이터 유형 구성
    title
    String
    genres
    stringFacet
    released
    Date
  5. Save Changes를 클릭합니다.

  1. 기본 인덱스 정의를 다음 정의로 바꿉니다.

    1{
    2 "mappings": {
    3 "dynamic": false,
    4 "fields": {
    5 "title": {
    6 "type": "string"
    7 },
    8 "genres": {
    9 "type": "stringFacet"
    10 },
    11 "released": {
    12 "type": "date"
    13 }
    14 }
    15 }
    16}
  2. Next를 클릭합니다.

7

인덱스가 작성 중임을 보여주는 모달 창이 표시됩니다.

8

인덱스 작성에는 약 1분 정도가 소요됩니다. 작성하는 동안 Status 열은 Initial Sync을 읽습니다. 작성이 완료되면 Status 열에 Active이 표시됩니다.

이 섹션에서는 제목에 summer 용어가 포함된 영화의 결과를 조회하는 쿼리를 실행합니다. 쿼리에서 참조 지점을 검색하고, 후속 쿼리에서 이를 사용하여 지정된 참조 지점 전후의 동일한 용어에 대한 추가 결과를 조회합니다.

참고

기본적으로 Atlas Search는 문서의 관련성 점수에 따라 결과의 문서를 정렬합니다. 결과 내 여러 문서가 동일한 점수를 가질 경우 Atlas Search는 임의로 정렬된 결과를 반환합니다. 지정된 순서로 문서를 반환하려면 쿼리가 결과를 정렬할 고유한 필드인 released를 지정합니다.

이 섹션에서는 다음을 수행하는 방법을 설명합니다.

  1. 페이지 1 조회 및 페이지 매김 토큰 생성

  2. Retrieve Page 2 Using searchAfter

  3. 다음을 사용하여 1페이지로 돌아가기 searchBefore

  4. searchAfter$skip을 사용하여 2페이지에서 5페이지로 이동

  5. 페이지화된 결과에 패싯 사용

이러한 쿼리를 실행 하려면 먼저 다음을 수행해야 합니다.

1

터미널 창에서 mongosh를 열고 cluster에 연결합니다. 연결에 대한 자세한 지침은 mongosh를 통해 연결을 참조하세요.

2
use sample_mflix
switched to db sample_mflix
3

샘플 쿼리는 다음 파이프라인 단계를 사용하여 첫 번째 페이지에 대한 결과를 검색하고 토큰 또는 후속 쿼리에 대한 참조 지점을 검색합니다.

  • 텍스트 연산자를 사용하여 title 필드에 summer가 포함된 제목을 검색합니다.

  • 정렬 옵션을 사용하여 released 필드 값에 따라 결과를 오름차순으로 정렬합니다.

결과를 10 문서로 제한합니다.

결과에는 문서의 title, releasedgenres 필드만 포함됩니다. 또한 이 쿼리는 결과의 각 문서에 다음 필드를 추가합니다.

  • paginationToken후속 쿼리에서 참조 지점으로 사용할 수 있는 토큰입니다.

  • score결과에서 문서의 관련성 점수입니다.

db.movies.aggregate([
{
"$search": {
"index": "pagination-tutorial",
"text": {
"path": "title",
"query": "summer"
},
"sort": { "released": 1 }
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"released": 1,
"genres": 1,
"paginationToken" : { "$meta" : "searchSequenceToken" },
"score": { "$meta": "searchScore" }
}
}
])
[
{
genres: [ 'Drama' ],
title: "A Summer at Grandpa's",
paginationToken: 'CKUdGgJgAA==',
score: 2.262615203857422
},
{
genres: [ 'Musical', 'Romance' ],
title: 'Summer Stock',
released: ISODate('1951-01-22T00:00:00.000Z'),
paginationToken: 'CJsFGgkpAHw/0HT///8=',
score: 3.000213623046875
},
{
genres: [ 'Comedy', 'Romance' ],
title: 'Smiles of a Summer Night',
released: ISODate('1957-12-23T00:00:00.000Z'),
paginationToken: 'CKIHGgkpAKDlpaf///8=',
score: 2.0149309635162354
},
{
genres: [ 'Drama' ],
title: 'Violent Summer',
released: ISODate('1959-11-13T00:00:00.000Z'),
paginationToken: 'CI8JGgkpAJhJh7X///8=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Romance' ],
title: 'A Summer Place',
released: ISODate('1959-11-18T00:00:00.000Z'),
paginationToken: 'CLoJGgkpAGQJobX///8=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'The End of Summer',
released: ISODate('1962-02-01T00:00:00.000Z'),
paginationToken: 'CK0KGgkpAAzP18X///8=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer and Smoke',
released: ISODate('1962-04-01T00:00:00.000Z'),
paginationToken: 'CMQKGgkpAECmB8f///8=',
score: 2.579726457595825
},
{
genres: [ 'Documentary', 'Sport' ],
title: 'The Endless Summer',
released: ISODate('1968-08-17T00:00:00.000Z'),
paginationToken: 'CO4MGgkpAJjH5vX///8=',
score: 2.579726457595825
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: "Summer of '42",
released: ISODate('1971-04-09T00:00:00.000Z'),
paginationToken: 'CPQQGgkpAGRgUAkAAAA=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'That Certain Summer',
released: ISODate('1972-11-01T00:00:00.000Z'),
paginationToken: 'COwRGgkpAPQV0hQAAAA=',
score: 2.579726457595825
}
]

추가 결과를 검색하려면 결과를 검색할 참조 지점을 지정합니다. 이 쿼리는 애플리케이션에서 '다음 페이지'와 같은 함수를 작성하기 위해 결과를 검색하는 방법을 보여줍니다.

샘플 쿼리는 다음 파이프라인 단계를 사용하여 동일한 용어에 대한 이전 쿼리에서 searchSequenceToken에 의해 생성된 토큰을 사용하여 두 번째 페이지의 결과를 조회합니다.

  • 텍스트 연산자를 사용하여 title 필드에 summer가 포함된 제목을 검색합니다.

  • 정렬 옵션을 사용하여 released 필드 값에 따라 결과를 오름차순으로 정렬합니다.

  • 결과에서 10번째 문서 다음에 있는 문서를 반환합니다. 쿼리는 이 문서를 페이지 1 조회 및 페이지 매김 토큰 생성을 위해 실행한 쿼리에서 생성된 페이지 매김토큰을 사용하여 지정합니다.

결과를 10 문서로 제한합니다.

결과에는 문서의 title, releasedgenres 필드만 포함됩니다. 또한 결과의 각 문서에 다음 필드를 추가합니다.

  • paginationToken은 후속 쿼리에서 참조 지점으로 사용할 수 있는 토큰입니다.

  • score결과에서 문서의 관련성 점수입니다.

db.movies.aggregate([
{
"$search": {
"index": "pagination-tutorial",
"text": {
"path": "title",
"query": "summer"
},
"searchAfter": "COwRGgkpAPQV0hQAAAA=",
"sort": { "released": 1 }
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"released": 1,
"genres": 1,
"paginationToken" : { "$meta" : "searchSequenceToken" },
"score": { "$meta": "searchScore" }
}
}
])
[
{
genres: [ 'Drama' ],
title: 'Summer Wishes, Winter Dreams',
released: ISODate('1974-09-09T00:00:00.000Z'),
paginationToken: 'CMwSGgkpAECHcCIAAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'Thriller' ],
title: 'Shadows of a Hot Summer',
released: ISODate('1978-09-01T00:00:00.000Z'),
paginationToken: 'CPEVGgkpAGw/qz8AAAA=',
score: 2.0149309635162354
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNYRGgkpAFhj5UAAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNsRGgkpAFhj5UAAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Mystery' ],
title: 'One Deadly Summer',
released: ISODate('1983-05-11T00:00:00.000Z'),
paginationToken: 'COwcGgkpAAjtIGIAAAA=',
score: 2.579726457595825
},
{
genres: [ 'Comedy' ],
title: 'Summer Rental',
released: ISODate('1985-08-09T00:00:00.000Z'),
paginationToken: 'CL8fGgkpABTypHIAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer',
released: ISODate('1986-08-29T00:00:00.000Z'),
paginationToken: 'CO0gGgkpAHCiY3oAAAA=',
score: 3.5844719409942627
},
{
genres: [ 'Drama', 'Thriller' ],
title: 'Summer Camp Nightmare',
released: ISODate('1987-04-17T00:00:00.000Z'),
paginationToken: 'CNkiGgkpAHQ/CX8AAAA=',
score: 2.579726457595825
},
{
genres: [ 'Action', 'Crime', 'Drama' ],
title: 'Cold Summer of 1953',
released: ISODate('1988-06-01T00:00:00.000Z'),
paginationToken: 'CNsjGgkpACjVTYcAAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'War' ],
title: 'That Summer of White Roses',
released: ISODate('1989-07-11T00:00:00.000Z'),
paginationToken: 'CI0mGgkpALSEc48AAAA=',
score: 2.0149309635162354
}
]

이전 결과를 검색하려면 결과를 검색하기 전에 검색할 참조 지점을 지정합니다. 이 쿼리는 애플리케이션에서 '이전 페이지'와 같은 함수를 작성하기 위해 결과를 검색하는 방법을 보여줍니다.

샘플 쿼리는 다음 파이프라인 단계를 사용하여 동일한 용어에 대한 이전 쿼리에서 searchSequenceToken으로 생성된 토큰을 사용하여 두 번째 페이지의 결과를 검색합니다.

  • 텍스트 연산자를 사용하여 title 필드에 summer가 포함된 제목을 검색합니다.

  • 정렬 옵션을 사용하여 released 필드 값에 따라 결과를 오름차순으로 정렬합니다.

  • searchAfter를 사용하여 2페이지를 조회하기 위해 실행한 쿼리 결과에서 11번째 문서와 연결된 페이지 매김 토큰을 사용하여 Atlas Search 결과에서 문서 1~10을 반환합니다.

결과를 10 문서로 제한합니다.

결과에는 문서의 title, releasedgenres 필드만 포함됩니다. 또한 결과의 각 문서에 다음 필드를 추가합니다.

  • paginationToken후속 쿼리에서 참조 지점으로 사용할 수 있는 토큰입니다.

  • score결과에서 문서의 관련성 점수입니다.

참고

기본적으로 Atlas Search는 참조 지점 이전에 결과를 조회하기 위해 토큰을 지정한 쿼리에 대해 결과를 역순으로 반환합니다. 문서를 순서대로 반환하기 위해 쿼리는 toArray() 및 JavaScript reverse() 메서드를 사용합니다.

db.movies.aggregate([
{
"$search": {
"index": "pagination-tutorial",
"text": {
"path": "title",
"query": "summer"
},
"searchBefore": "CMwSGgkpAECHcCIAAAA=",
"sort": { "released": 1 }
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"released": 1,
"genres": 1,
"paginationToken" : { "$meta" : "searchSequenceToken" },
"score": { "$meta": "searchScore" }
}
}
]).toArray().reverse()
[
{
genres: [ 'Drama' ],
title: "A Summer at Grandpa's",
paginationToken: 'CKUdGgJgAA==',
score: 2.262615203857422
},
{
genres: [ 'Musical', 'Romance' ],
title: 'Summer Stock',
released: ISODate('1951-01-22T00:00:00.000Z'),
paginationToken: 'CJsFGgkpAHw/0HT///8=',
score: 3.000213623046875
},
{
genres: [ 'Comedy', 'Romance' ],
title: 'Smiles of a Summer Night',
released: ISODate('1957-12-23T00:00:00.000Z'),
paginationToken: 'CKIHGgkpAKDlpaf///8=',
score: 2.0149309635162354
},
{
genres: [ 'Drama' ],
title: 'Violent Summer',
released: ISODate('1959-11-13T00:00:00.000Z'),
paginationToken: 'CI8JGgkpAJhJh7X///8=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Romance' ],
title: 'A Summer Place',
released: ISODate('1959-11-18T00:00:00.000Z'),
paginationToken: 'CLoJGgkpAGQJobX///8=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'The End of Summer',
released: ISODate('1962-02-01T00:00:00.000Z'),
paginationToken: 'CK0KGgkpAAzP18X///8=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer and Smoke',
released: ISODate('1962-04-01T00:00:00.000Z'),
paginationToken: 'CMQKGgkpAECmB8f///8=',
score: 2.579726457595825
},
{
genres: [ 'Documentary', 'Sport' ],
title: 'The Endless Summer',
released: ISODate('1968-08-17T00:00:00.000Z'),
paginationToken: 'CO4MGgkpAJjH5vX///8=',
score: 2.579726457595825
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: "Summer of '42",
released: ISODate('1971-04-09T00:00:00.000Z'),
paginationToken: 'CPQQGgkpAGRgUAkAAAA=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'That Certain Summer',
released: ISODate('1972-11-01T00:00:00.000Z'),
paginationToken: 'COwRGgkpAPQV0hQAAAA=',
score: 2.579726457595825
}
]

결과를 건너뛰고 2페이지에서 5페이지로 건너뛰려면 searchSequenceToken에서 생성된 토큰을 사용하여 결과를 검색한 다음 결과에서 문서 20개를 건너뛸 참조 지점을 지정합니다. 이 쿼리는 페이지 건너뛰기를 허용하는 애플리케이션에서 함수를 작성하기 위해 결과를 검색하는 방법을 보여줍니다.

샘플 쿼리는 다음 파이프라인 단계를 사용하여 동일한 용어에 대해 이전 쿼리에서 searchSequenceToken에 의해 생성된 토큰과 $skip$limit 단계를 사용하여 5페이지의 결과로 이동합니다.

  • 텍스트 연산자를 사용하여 title 필드에 summer가 포함된 제목을 검색합니다.

  • 정렬 옵션을 사용하여 released 필드 값에 따라 결과를 오름차순으로 정렬합니다.

  • searchAfter를 사용하여 2페이지를 조회하기 위해 실행한 쿼리에서 생성된 페이지 매김 토큰을 사용하여 지정된 20번째 문서 이후의 문서를 반환합니다.

searchAfter를 사용하여 2페이지를 검색하기 위해 실행한 쿼리 결과의 20번째 문서와 관련된 토큰인 지정된 참조 지점 다음에 있는 결과의 20개의 문서를 건너뜁니다.
결과를 10 문서로 제한합니다.

결과에는 문서의 title, releasedgenres 필드만 포함됩니다. 또한 결과의 각 문서에 다음 필드를 추가합니다.

  • paginationToken후속 쿼리에서 참조 지점으로 사용할 수 있는 토큰입니다.

  • score결과에서 문서의 관련성 점수입니다.

db.movies.aggregate([
{
"$search": {
"index": "pagination-tutorial",
"text": {
"path": "title",
"query": "summer"
},
"searchAfter": "COwRGgkpAPQV0hQAAAA=",
"sort": { "released": 1 }
}
},
{
"$skip": 20
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"released": 1,
"genres": 1,
"paginationToken" : { "$meta" : "searchSequenceToken" },
"score": { "$meta": "searchScore" }
}
}
])
[
{
genres: [ 'Drama' ],
title: 'A Storm in Summer',
released: ISODate('2000-02-27T00:00:00.000Z'),
paginationToken: 'CO5FGgkpAChakN0AAAA=',
score: 2.262615203857422
},
{
genres: [ 'Comedy', 'Romance' ],
title: 'Wet Hot American Summer',
released: ISODate('2002-04-11T00:00:00.000Z'),
paginationToken: 'CKtIGgkpAFBUIu0AAAA=',
score: 2.262615203857422
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Things',
released: ISODate('2002-10-09T00:00:00.000Z'),
paginationToken: 'CIpPGgkpAFxzxvAAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Adventure', 'Drama', 'Family' ],
title: 'Wolf Summer',
released: ISODate('2003-02-28T00:00:00.000Z'),
paginationToken: 'COZWGgkpAGS6ofMAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Animation', 'Adventure' ],
title: 'Nasu: Summer in Andalusia',
released: ISODate('2003-06-26T00:00:00.000Z'),
paginationToken: 'CNlaGgkpAMxoAfYAAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama' ],
title: 'Spring, Summer, Fall, Winter... and Spring',
released: ISODate('2004-05-28T00:00:00.000Z'),
paginationToken: 'CJ5ZGgkpAOjnyPwAAAA=',
score: 1.8161234855651855
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Storm',
released: ISODate('2004-09-02T00:00:00.000Z'),
paginationToken: 'CMVfGgkpAMRwvP4AAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama' ],
title: 'Summer in the Golden Valley',
released: ISODate('2004-10-08T00:00:00.000Z'),
paginationToken: 'CNNWGgkpALTVdf8AAAA=',
score: 2.0149309635162354
},
{
genres: [ 'Drama', 'Romance' ],
title: 'My Summer of Love',
released: ISODate('2005-07-01T00:00:00.000Z'),
paginationToken: 'CL5aGgkpAEyxzwQBAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama' ],
title: 'Summer in Berlin',
released: ISODate('2006-01-05T00:00:00.000Z'),
paginationToken: 'CPZmGgkpANzclwgBAAA=',
score: 2.579726457595825
}
]

이 섹션에서는 searchSequenceToken을 Atlas Search 패싯과 함께 사용하는 방법을 보여줍니다.

샘플 쿼리는 다음 파이프라인 단계를 사용합니다:

  • 패싯 컬렉터를 사용하여 제목 필드에 summer이 포함된 summer을 검색합니다.

  • facets 옵션을 사용하여 각 장르의 결과에서 총 영화 수를 조회합니다.

searchSequenceToken 옵션을 사용하여 생성된 결과에 각 문서의 토큰을 저장하기 위해 paginationToken 필드를 추가합니다.
결과를 10 문서로 제한합니다.

다음과 같은 필드를 반환합니다.

  • docs 이 필드는 결과 및 paginationToken 필드에 있는 문서의 title, releasedgenres 필드만 포함합니다.

  • meta 이 필드는 $$SEARCH_META 변수에 저장된 각 장르의 검색 결과에 포함된 총 영화 수를 포함합니다.

db.movies.aggregate([
{
"$search": {
"index": "pagination-tutorial",
"facet": {
"operator": {
"text": {
"path": "title",
"query": "summer"
}
},
"facets": {
"genresFacet": {
"type": "string",
"path": "genres"
}
}
}
}
},
{
"$addFields": {
"paginationToken" : { "$meta" : "searchSequenceToken" }
}
},
{ "$limit": 10 },
{
"$facet": {
"docs": [
{ "$project":
{
"_id": 0,
"title": 1,
"released": 1,
"genres": 1,
"paginationToken" : 1
}
}
],
"meta": [
{ "$replaceWith": "$$SEARCH_META" },
{ "$limit": 1 }
]
}
},
{
"$set": {
"meta": {
"$arrayElemAt": ["$meta", 0]
}
}
}
])
[
{
docs: [
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer',
released: ISODate('1986-08-29T00:00:00.000Z'),
paginationToken: 'CO0gFf1nZUA='
},
{
genres: [ 'Musical', 'Romance' ],
title: 'Summer Stock',
released: ISODate('1951-01-22T00:00:00.000Z'),
paginationToken: 'CJsFFYADQEA='
},
{
genres: [ 'Drama' ],
title: 'Violent Summer',
released: ISODate('1959-11-13T00:00:00.000Z'),
paginationToken: 'CI8JFYADQEA='
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNYRFYADQEA='
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNsRFYADQEA='
},
{
genres: [ 'Comedy' ],
title: 'Summer Rental',
released: ISODate('1985-08-09T00:00:00.000Z'),
paginationToken: 'CL8fFYADQEA='
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Things',
released: ISODate('2002-10-09T00:00:00.000Z'),
paginationToken: 'CIpPFYADQEA='
},
{
genres: [ 'Adventure', 'Drama', 'Family' ],
title: 'Wolf Summer',
released: ISODate('2003-02-28T00:00:00.000Z'),
paginationToken: 'COZWFYADQEA='
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Storm',
released: ISODate('2004-09-02T00:00:00.000Z'),
paginationToken: 'CMVfFYADQEA='
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer Palace',
released: ISODate('2007-04-18T00:00:00.000Z'),
paginationToken: 'CIRrFYADQEA='
}
],
meta: {
count: { lowerBound: Long('65') },
facet: {
genresFacet: {
buckets: [
{ _id: 'Drama', count: Long('48') },
{ _id: 'Romance', count: Long('20') },
{ _id: 'Comedy', count: Long('19') },
{ _id: 'Family', count: Long('7') },
{ _id: 'Adventure', count: Long('5') },
{ _id: 'Crime', count: Long('5') },
{ _id: 'Mystery', count: Long('5') },
{ _id: 'Thriller', count: Long('5') },
{ _id: 'Horror', count: Long('4') },
{ _id: 'Action', count: Long('3') }
]
}
}
}
}
]

돌아가기

페이지 매김 결과