컬렉션 에 대한 인덱스 정의에서 storedSource 옵션을 구성한 경우 MongoDB Search는 지정된 필드를 에 mongot 저장합니다. MongoDB Search 쿼리에서 returnStoredSource 부울 옵션을 사용하면 컬렉션 에서 전체 문서를 가져오는 대신 해당 필드만 조회 할 수 있습니다.
기본값 으로 MongoDB Search는 MongoDB 에 대한 문서 를 일치시킨 후 백엔드 데이터베이스 에서 암시적으로 전체 문서 쿼리 수행합니다. 이 조회는 $search 단계에서 일치하는 모든 데이터 세트를 가져오거나(예: $sort, $group) 데이터의 많은 부분을 필터하다 하는 후속 집계 파이프라인 단계 (예: $match, $skip)의 성능을 크게 저하시킬 수 있습니다. storedSource 옵션을 구성한 경우 returnStoredSource 옵션을 사용하여 MongoDB Search에 직접 저장된 문서의 일부만 조회 하고 데이터베이스 에서 전체 문서 조회를 방지할 수 있습니다. 이를 통해 필드 수가 최소화된 문서에 대해 대부분의 데이터베이스 측 필터링 작업을 수행할 수 있습니다. 그런 다음 를 사용하여 파이프라인 의 후반 단계에서 문서의 모든 필드를 조회 할 수 $lookup 있습니다.
참고
returnStoredSourceMongoDB 7.0 이상을 실행 클러스터에서만 사용할 수 있습니다.샤딩된 컬렉션의 경우
$lookup는 MongoDB 5.1 이상을 실행 클러스터에서만 사용할 수 있습니다.
구문
returnStoredSource 쿼리에 다음 구문이 있습니다.
{ $search: { "<operator>": { <operator-specification> }, "returnStoredSource": true | false // optional, defaults to "false" } }
쿼리 구문에 대해 자세히 알아보려면 $search 를 참조하세요.
행동
returnStoredSource 부울 옵션은 MongoDB Search가 데이터베이스 에서 전체 문서 조회를 수행해야 하는지, 아니면 MongoDB Search에서 직접 저장된 필드를 반환해야 하는지 여부를 지정합니다. 인덱스 정의에 MongoDB Search에 필드를 저장하기 위한 구성이 포함된 경우에만 returnStoredSource 옵션을 사용할 수 있습니다. MongoDB Search에 필드를 저장하는 방법에 대해 자세히 학습 인덱스 참조 및 MongoDB Search 인덱스에 저장된 소스 필드 정의를 참조하세요.
returnStoredSource 옵션에 대해 다음 값 중 하나를 설정할 수 있습니다.
true- MongoDB Search에서 직접 저장된 소스 필드만 반환false- 백엔드 데이터베이스에서 암시적 전체 문서 조회 수행(기본값)
returnStoredSource 부울 옵션을 true로 설정하다 MongoDB Search 쿼리를 실행 경우:
문서 저장하도록 구성된 필드가 포함되어 있지 않은 경우 MongoDB Search는 빈 문서 반환합니다.
인덱스 정의에 저장된 소스 구성이 포함되지 않은 경우 MongoDB Search는 오류를 반환합니다.
MongoDB Search는 복제 지연 으로 인해 오래된 데이터를 반환할 수 있습니다.
MongoDB Search는 샤딩된 클러스터에서 중복 데이터를 반환할 수 있습니다.
백엔드 데이터베이스 에서 컬렉션 에 대해 대량의 데이터 삽입 및 업데이트 작업을 수행하는 경우 mongot 에 저장된 데이터가 복제 지연 으로 인해 최신 상태가 아닐 수 있으므로 MongoDB Search에서 오래된 데이터를 반환할 수 있습니다. Atlas UI 의 mongod oplog 에서 MongoDB Search가 변경 사항을 복제하는 데 지연된 대략적인 시간(밀리초)을 확인할 수 있습니다. 자세한 학습 은 MongoDB 검색 지표 검토를 참조하세요.
청크 마이그레이션 중에 고아 문서 가 있는 경우, MongoDB Search는 샤딩된 클러스터에 대한 쿼리에 대해 중복 문서를 반환할 수 있습니다.
샘플 사용
$search 단계에서 많은 결과가 삭제되고 데이터베이스에서 암시적 문서 조회를 수행해야 하는 경우 returnStoredSource 옵션을 사용하는 것이 좋습니다. 정렬 또는 필터링에 필요한 필드를 저장하고 쿼리 시 returnStoredSource 옵션을 사용하여 다음 조치를 수행할 수 있습니다.
MongoDB Search에서 반환된 부분 문서에 대한 중간 작업
$lookup전체 문서가 필요한 경우 파이프라인 끝에서
중요
효율성 위해 MongoDB Search에 저장 최소 필드 수만 구성하세요. 문서가 조회 중에 문제를 일으킬 만큼 큰 경우 이 옵션을 사용합니다.
예시
이 섹션의 예제에서는 sample_mflix.movies 컬렉션 사용합니다. 예제에서는 MongoDB Search가 $search 단계 이후에 반환하는 문서를 정렬하거나 일치시킨 다음 데이터베이스 에서 문서를 조회하는 방법을 보여 줍니다.
다음 인덱스 정의를 사용하여 인덱스를 생성합니다. 컬렉션에 대한 인덱스 정의는 다음 필드를 지정합니다.
인덱스
title필드year및title필드 저장
{ "mappings": { "fields": { "title": { "type": "string" } } }, "storedSource": { "include": [ "year", "title" ] } } collection에 대해 다음 쿼리를 실행합니다.
db.movies.aggregate([ { // search and output documents $search: { "text": { "query": "baseball", "path": "title" }, "returnStoredSource": true // return stored fields only } }, // fetch all matched dataset from $search stage and sort it { $sort: {"year": 1, "title": 1} }, // discard everything except top 10 results { $limit: 10 }, // perform full document lookup for top 10 documents only { $lookup: { from: "movies", localField: "_id", foreignField: "_id", as: "document" } } ]) 이 쿼리는 다음 문서를 반환합니다.
1 [ 2 { 3 _id: ObjectId("573a1399f29313caabced370"), 4 title: 'Mr. Baseball', 5 year: 1992, 6 document: [ 7 { ... } // full document returned by $lookup 8 ] 9 }, 10 { 11 _id: ObjectId("573a1399f29313caabcee1aa"), 12 title: 'Baseball', 13 year: 1994, 14 document: [ 15 { ... } // full document returned by $lookup 16 ] 17 } 18 ]
다음 인덱스 정의를 사용하여 인덱스를 생성합니다. 컬렉션에 대한 인덱스 정의는 다음 필드를 지정합니다.
인덱스
title필드imdb.rating및imdb.votes필드 저장
{ "mappings": { "fields": { "title": { "type": "string" } } }, "storedSource": { "include": [ "imdb.rating", "imdb.votes" ] } } collection에 대해 다음 쿼리를 실행합니다.
db.movies.aggregate([ { // search and output documents $search: { "text": { "query": "baseball", "path": "title" }, "returnStoredSource": true // return stored fields only } }, // filter dataset from $search stage using $match { $match: {$or: [ { "imdb.rating": { $gt: 8.2 } }, { "imdb.votes": { $gte: 4500 } } ]} }, // perform full document lookup for matched documents only { $lookup: { from: "movies", localField: "_id", foreignField: "_id", as: "document" } } ]) 이 쿼리는 다음 문서를 반환합니다.
1 [ 2 { 3 _id: ObjectId("573a1399f29313caabcee1aa"), 4 imdb: { rating: 9.1, votes: 2460 }, 5 document: [ 6 { ... } // full document returned by $lookup 7 ] 8 }, 9 { 10 _id: ObjectId("573a1399f29313caabced370"), 11 imdb: { rating: 5.8, votes: 7617 }, 12 document: [ 13 { ... } // full document returned by $lookup 14 ] 15 } 16 ]