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

쿼리 결과 페이지 매김 방법

이 페이지의 내용

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

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

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

  2. 인덱싱된 필드에 대해 Atlas Search 쿼리를 실행하여 다음을 수행할 수 있는 순차적 결과를 반환합니다.

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

    • 두 번째 페이지에서 다섯 번째 페이지로 이동하고 결과에서 페이지를 건너뜁니다.

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

시작하기 전에 Atlas 클러스터가 전제 조건에 설명된 요구 사항을 충족하는지 확인하세요.

참고

Atlas Search $search searchSequenceToken 를 사용하여 순차 결과를 검색하려면 Atlas cluster에서 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 페이지가 아직 표시되지 않은 경우 사이드바에서 Database를 클릭합니다.

2

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

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

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

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

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

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

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

  2. 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 필드를 필드에 대한 전체 텍스트 검색을 위한 문자열 유형으로 지정

  • 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 Mapping 창에서 다음 필드에 대한 설정을 하나씩 구성한 후 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. 다음을 사용하여 페이지 2 조회 searchAfter

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

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

  5. 페이지가 매겨진 결과에 패싯 사용

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

1

터미널 창에서 mongosh 를 열고 클러스터에 연결합니다. 연결에 대한 자세한 내용은 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" }
}
}
])

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

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

결과를 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" }
}
}
])

이전 결과를 조회하려면 결과를 조회하려는 기준점 이전의 기준점을 지정합니다. 이 쿼리는 결과를 검색하여 애플리케이션에서 '이전 페이지'와 같은 함수를 빌드하는 방법을 보여 줍니다.

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

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

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

  • 2 searchAfter사용하여 페이지 조회 에 실행한 쿼리 결과에서 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()

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

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

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

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

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

지정된 참조 지점 이후의 결과에서 20 개의 문서를 건너 searchAfter 2
결과를 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" }
}
}
])

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

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

  • 패싯 수집기를 사용하여 title 필드에서 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]
}
}
}
])

돌아가기

페이지 매김 결과

다음

모든 결과