Atlas Search를 위해 MongoDB 보기를 사용하여 문서 변환 및 컬렉션 필터링
보기에 Atlas Search 인덱스를 생성하여 문서와 컬렉션을 변환함으로써 컬렉션의 일부만 인덱싱하거나, 호환되지 않는 데이터 유형 또는 데이터 모델을 지원하는 등의 작업을 수행할 수 있습니다.
참고
MongoDB 보기와 Atlas Search의 함께 사용은 미리보기 기능으로 제공됩니다. 기능과 관련 문서는 미리보기 기간 동안 언제든지 변경될 수 있습니다.
다음 예시에서는 sample_mflix 및 sample_airbnb 샘플 데이터베이스를 사용합니다.
참고
명확화
이 페이지에서는 표준 보기에 대해 설명합니다. 온디맨드 구체화된 보기에 대한 자세한 내용은 온디맨드 구체화 보기를 참조하세요.
보기 유형 간의 차이점에 대해 알아보려면 온디맨드 구체화 보기의 비교를 참조하세요.
요구 사항:
다음을 사용해야 합니다.
MongoDB 8.0 이상 버전
미리보기 기간 동안 다음을 사용해야 합니다.
제한 사항
Atlas Search는 다음 단계에서
$expr
에 대해서만 보기를 지원합니다.인덱스 이름은 소스 컬렉션과 모든 보기에서 고유해야 합니다.
Atlas Search는
$$USER_ROLES
및$random
과 같은 동적 결과를 생성하는 변수가 포함된 보기 정의를 지원하지 않습니다.Atlas Search 쿼리는 소스 컬렉션에 나타나는 원본 문서를 그대로 반환합니다.
예시: 문서 필터링
보기를 생성하려면 createCollection
권한이 필요합니다.
컬렉션의 일부만 인덱싱하여 문서를 필터링할 수 있습니다. 다음 예시는 sample_mflix.movies
컬렉션에 보기를 생성하여 2000년 1월 1일 이후에 개봉한 영화만 검색할 수 있도록 합니다.
mongosh
를 사용하여 Atlas 클러스터에 연결합니다.
자세한 내용은 mongosh
를 통한 연결을 참조하세요.
AtlasGo Atlas 에서 프로젝트 의 Clusters 페이지로 고 (Go) 합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.
아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.
Clusters(클러스터) 페이지가 표시됩니다.
인덱스 구성을 시작합니다.
페이지에서 다음 항목을 선택한 후 Next를 클릭합니다.
Search Type | Atlas Search 인덱스 유형을 선택합니다. |
Index Name and Data Source | 다음 정보를 지정합니다.
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
releasedAfter2000Index
부분 인덱스에 쿼리를 실행합니다.
참고
다음 예시는 소스 컬렉션 movies
에 대해 .aggregate
명령을 실행하여 releasedAfter2000Index
인덱스를 쿼리합니다. 미리보기 기간 동안 보기의 소스 컬렉션(movies
)을 사용하여 보기에서 생성된 검색 인덱스를 쿼리해야 합니다. 보기(movies_ReleasedAfter2000
)를 쿼리하면 Atlas Search는 결과를 반환하지 않습니다.
use sample_mflix
1 db.movies.aggregate([ 2 { 3 $search: { 4 index: "releasedAfter2000Index", 5 text: { 6 path: "title", 7 query: "foo" 8 }, 9 sort: { 10 released: 1 11 } 12 } 13 } 14 ])
[ { _id: ObjectId('573a13d2f29313caabd929f8'), plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo ...", genres: [ 'Documentary', 'Music' ], runtime: 150, cast: [ 'Shawn Cloninger', 'William Goldsmith', 'Jessy Greene', 'Dave Grohl' ], num_mflix_comments: 0, poster: 'https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZTcwNTU1NjQxOA@@._V1_SY1000_SX677_AL_.jpg', title: 'Foo Fighters: Back and Forth', fullplot: `Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo tapes through the creation of their 2011 album, "Wasting Light."`, languages: [ 'English' ], released: ISODate('2011-04-05T00:00:00.000Z'), directors: [ 'James Moll' ], awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' }, lastupdated: '2015-08-19 00:00:25.937000000', year: 2011, imdb: { rating: 8.4, votes: 3745, id: 1853563 }, countries: [ 'USA' ], type: 'movie', tomatoes: { viewer: { rating: 4.4, numReviews: 857, meter: 96 }, dvd: ISODate('2011-08-08T00:00:00.000Z'), website: 'http://us.foofightersfilm.com/', production: 'Cinedigm Digital Cinema', lastUpdated: ISODate('2015-09-12T18:42:01.000Z') } } ]
예시: 필드를 추가하거나 수정하기
다음 예시에서는 price
및 cleaningFee
필드의 합계인 새로운 totalPrice
필드를 기반으로 sample_airbnb.listingsAndReviews
컬렉션에서 숙박 시설을 검색할 수 있습니다. 또한 Atlas Search는 Decimal128
유형을 지원하지 않으므로 값을 Double
로 변환합니다.
mongosh
를 사용하여 Atlas 클러스터에 연결합니다.
자세한 내용은 mongosh
를 통한 연결을 참조하세요.
AtlasGo Atlas 에서 프로젝트 의 Clusters 페이지로 고 (Go) 합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.
아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.
Clusters(클러스터) 페이지가 표시됩니다.
인덱스 구성을 시작합니다.
페이지에서 다음 항목을 선택한 후 Next를 클릭합니다.
Search Type | Atlas Search 인덱스 유형을 선택합니다. |
Index Name and Data Source | 다음 정보를 지정합니다.
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
totalPriceIndex
인덱스에 대해 쿼리를 실행합니다.
참고
다음 예시는 소스 컬렉션 listingsAndReviews
에 대해 .aggregate
명령을 실행하여 totalPriceIndex
인덱스를 쿼리합니다. 미리보기 기간 동안 보기의 소스 컬렉션(listingsAndReviews
)을 사용하여 보기에서 생성된 검색 인덱스를 쿼리해야 합니다. 보기(listingsAndReviews_totalPrice
)를 쿼리하면 Atlas Search는 결과를 반환하지 않습니다.
use sample_airbnb
1 db.listingsAndReviews.aggregate([ 2 { 3 $search: { 4 index: "totalPriceIndex", 5 range: { 6 path: "totalPrice", 7 lte: 300 8 }, 9 returnStoredSource: true 10 } 11 } 12 ])
[ { _id: '10006546', totalPrice: 115 }, { _id: '1001265', totalPrice: 215 }, { _id: '10021707', totalPrice: 40 }, { _id: '1003530', totalPrice: 270 }, { _id: '10038496', totalPrice: 269 }, { _id: '10051164', totalPrice: 250 }, { _id: '10057447', totalPrice: 50 }, { _id: '10057826', totalPrice: 205 }, { _id: '10059244', totalPrice: 43 }, { _id: '10066928', totalPrice: 140 }, { _id: '10082422', totalPrice: 60 }, { _id: '10083468', totalPrice: 40 }, { _id: '10084023', totalPrice: 231 }, { _id: '10091713', totalPrice: 231 }, { _id: '10092679', totalPrice: 58 }, { _id: '10096773', totalPrice: 205 }, { _id: '10112159', totalPrice: 90 }, { _id: '10117617', totalPrice: 55 }, { _id: '10120414', totalPrice: 150 }, { _id: '10133554', totalPrice: 121 } ]
보기 편집
다음 예시는 2000년 이전 영화에 대한 movies_ReleasedAfter2000
MongoDB 보기를 업데이트합니다.
db.runCommand( { collMod: "movies_ReleasedAfter2000", viewOn: "movies", "pipeline": [ { $match: { $expr: { $lt: [ "$released", ISODate("2000-01-01T00") ] } } } ] } )
이 명령을 실행한 후 Atlas Search는 보기 정의의 변경 사항을 자동으로 감지하고 다운타임 없이 재인덱싱을 수행합니다.
보기에 대한 파이프라인 반환
다음 예시는 movies_ReleasedAfter2000
보기에서 파이프라인을 반환합니다.
1 db.getCollectionInfos({ name: "movies_ReleasedAfter2000" })[0].options.pipeline
[ { '$match': { '$expr': { '$gt': [ '$released', ISODate('2000-01-01T00:00:00.000Z') ] } } } ]
문제 해결
다음 시나리오에서는 인덱스 상태가 FAILED
로 변경됩니다.
Atlas Search와 호환되지 않는 보기에 인덱스를 생성한 경우
Atlas Search 호환성 요구 사항을 충족하지 않는 방식으로 보기를 편집한 경우
보기의 소스 컬렉션을 제거하거나 변경한 경우
예를 들어 하나의 보기가 다른 보기를 기반으로 생성되었고 그 상위 보기 소스를 다른 컬렉션으로 변경하는 경우입니다.
참고
이 제한은 뷰가 다른 뷰의 하위인 경우에도 적용됩니다. 예를 들어, 모든 하위 항목의 출처가 되는 소스 컬렉션을 변경하거나 제거할 수 없습니다.
다음 시나리오에서는 인덱스가 중단됩니다.
경고
뷰에 정의된 집계 파이프라인이 컬렉션의 문서와 호환되지 않으면 검색 복제가 실패합니다. 예를 들어, 배열이 포함된 문서 필드에서 $toDouble
표현식이 작동하는 경우 복제가 실패합니다. 뷰가 컬렉션의 모든 문서에서 오류 없이 작동하는지 확인하세요.
인덱스가
READY
되는 사이에 뷰 정의 집계 실패를 일으키면, 인덱스는STALE
상태가 됩니다. 문서를 해결하거나 뷰 정의를 변경하여 더 이상 실패하지 않도록 하면 인덱스가READY
로 돌아갑니다. 그러나 인덱스는 oplog에서 복제가 자동으로 제거될 때까지 쿼리할 수 있습니다.인덱스가
BUILDING
일 때 뷰 정의가 집계 파이프라인 오류를 일으키면 문서를 수정할 때까지 인덱스 생성이 중단됩니다. 문서를 해결하거나 뷰 정의를 변경하여 더 이상 실패하지 않도록 하면 인덱스가READY
로 돌아갑니다.
Atlas UI의 인덱스 상태 세부 정보 페이지에서 인덱스 상태를 볼 수 있습니다.
인덱스 프로세스
뷰에서 Atlas Search 인덱스를 만들 때mongot
프로세스는 일반 컬렉션에 Atlas Search 인덱스를 생성할 때와 동일한 작업을 수행합니다. mongot
프로세스:
컬렉션에 대한 인덱스 정의의 규칙을 기반으로 Atlas Search 인덱스를 만듭니다.
변경 스트림에서 Atlas Search 인덱스를 정의한 컬렉션에 대해 문서 및 인덱스의 현재 상태를 모니터링합니다.
Atlas Search 쿼리를 처리하고 일치하는 문서에 대한 문서 ID 및 기타 검색 메타데이터를
mongod
에 반환합니다. 그런 다음 전체 문서 조회를 수행하고 결과를 클라이언트에 반환합니다.
뷰에서 Atlas Search 인덱스를 생성하면 1 및 2 단계에서 뷰 정의가 적용되고 변환된 문서는 디스크의 Atlas Search 인덱스에 저장됩니다.
자세히 알아보기
뷰에 대한 자세한 내용은 뷰를 참조하세요.
뷰에서 Atlas Vector Search 인덱스를 생성하려면 MongoDB 뷰를 사용하여 문서를 변환하고 컬렉션을 Atlas Vector Search를 위해 필터링하는 방법을 참조하세요.