returnScope 옵션을 사용하여 쿼리 의 컨텍스트를 설정하다 하고 객체 배열을 개별 문서로 반환할 수 있습니다.
요구 사항:
returnScope를 사용하여 중첩된 객체를 개별 문서로 조회 하려면 다음을 수행해야 합니다.
- 객체 배열을 embeddedDocuments 유형으로 인덱싱합니다. 
- 조회 하려는 중첩 필드에 대해 storedSource를 정의합니다.MongoDB Search는 에 정의된 필드만 반환합니다. - storedSource
- 쿼리 에서 returnStoredSource 옵션을 로 설정합니다. - true
구문
returnScope 쿼리에 다음 구문이 있습니다.
쿼리 구문에 대해 자세히 알아보려면 $search 를 참조하세요.
행동
returnScope 옵션은 쿼리 에 대한 검색 컨텍스트를 설정합니다. 쿼리 에 returnScope 을 지정하면 MongoDB Search는 각 내장된 문서 개별 문서 인 것처럼 점수를 매기고, 정렬하고, 계산합니다.
고려 사항
연산자 사양에서 쿼리 하려는 필드 의 전체 경로를 지정해야 합니다.
returnScope 옵션을 사용하는 경우 MongoDB Search는 embeddedDocument 내에서 storedSource 로 구성한 필드만 반환합니다. embeddedDocument 경로 외부의 필드(예: 루트 수준의 필드)와 storedSource 로 구성되지 않은 필드는 반환되지 않습니다.
예시
다음 예는 쿼리에서 returnScope 옵션을 사용하는 방법을 보여줍니다. 이 예제에서는 sample_training.companies 샘플 데이터 세트를 사용합니다. 클러스터 에 데이터를 로드하고 컬렉션 의 필드에 샘플 인덱스 생성하는 경우 샘플 데이터에 대해 다음 쿼리를 시도할 수 있습니다.
샘플 인덱스
1 { 2   "mappings": {  3     "dynamic": false, 4     "fields": {  5       "funding_rounds": {  6         "type": "embeddedDocuments", 7         "dynamic": true, 8         "fields": { 9           "investments": { 10             "type": "embeddedDocuments", 11             "dynamic": true 12           } 13         }, 14         "storedSource": { 15           "include": [ 16             "round_code",  17             "raised_currency_code", 18             "raised_amount", 19             "investments.person", 20             "investments.financial_org" 21           ]  22         }, 23       }  24     } 25   } 26 } 
위의 인덱스 정의는 MongoDB Search를 다음과 같이 구성합니다.
- funding_rounds및- funding_rounds.investments필드를- embeddedDocuments유형으로 인덱싱합니다.
- 객체의 - funding_rounds및- funding_rounds.investments배열 에 중첩된 동적으로 인덱싱할 수 있는 모든 필드를 인덱싱합니다.
- 다음 필드를 - mongot에 저장합니다.- funding_rounds.round_code
- funding_rounds.raised_currency_code
- funding_rounds.raised_amount
- funding_rounds.investments.person
- funding_rounds.investments.financial_org
 
연산자를 embeddedDocument  사용하여 funding_rounds 및 funding_rounds.investments 필드 모두에 대해 요소별 쿼리를 수행할 수 있습니다. 다음 섹션에서는 returnScope 옵션을 사용하여 embeddedDocuments 필드를 개별 문서로 조회 몇 가지 샘플 쿼리를 보여줍니다.
{   ...,   "funding_rounds": [     {       "id": <integer>,       "round_code": "<string>",       "source_url": "<string>",       "source_description": "<string>",       "raised_amount": <integer>,       "raised_currency_code": "<string>",       "funded_year": <integer>,       "funded_month": "<string>",       "funded_day": "<string>",       "investments": [          {            "company": "<string>",            "financial_org": {              "name": "<string>",              "permalink": "<string>"            },            "person": {              "first_name": "<string>",              "last_name": "<string>",              "permalink": "<string>"            }          },          ...       ]     },     ...   ],   ... } 
샘플 쿼리
다음 섹션에서는 returnScope 옵션을 사용하여 mongot에 저장된 embeddedDocuments 유형 필드의 필드를 조회 샘플 쿼리를 보여 줍니다.
다음 range 쿼리(MongoDB 검색 연산자)를 사용하여 funding_rounds.raised_amount 필드 에 이상 및 5000000 이하 및 이하의 금액을 쿼리 . 옵션을 사용하여 10000000 쿼리 범위를 필드 funding_rounds 로 returnScope 설정합니다. 옵션을 사용하여 저장된 funding_rounds 객체의 배열 에 있는 필드를 포함하여 객체의 funding_rounds.investments 배열 내에 저장된 모든 필드를 returnStoredSource 반환합니다. 결과 수를 5 funding_rounds 문서로 제한합니다.
1 db.companies.aggregate( 2   { 3     "$search": { 4       "range": { 5         "path": "funding_rounds.raised_amount", 6         "gte": 5000000, 7         "lte": 10000000 8       }, 9       "returnStoredSource": true, 10       "returnScope": { 11         "path": "funding_rounds" 12       } 13     } 14   }, 15   { 16     "$limit": 5 17   } 18 ) 
[   {     round_code: 'a',     raised_amount: 5250000,     raised_currency_code: 'USD',     investments: [       {         financial_org: {           name: 'Frazier Technology Ventures',           permalink: 'frazier-technology-ventures'         },         person: null       },       {         financial_org: { name: 'Trinity Ventures', permalink: 'trinity-ventures' },         person: null       }     ]   },   {     round_code: 'b',     raised_amount: 9500000,     raised_currency_code: 'USD',     investments: [       {         financial_org: { name: 'Accel Partners', permalink: 'accel-partners' },         person: null       },       {         financial_org: {           name: 'Frazier Technology Ventures',           permalink: 'frazier-technology-ventures'         },         person: null       },       {         financial_org: { name: 'Trinity Ventures', permalink: 'trinity-ventures' },         person: null       }     ]   },   {     round_code: 'a',     raised_amount: 5000000,     raised_currency_code: 'USD',     investments: [       {         financial_org: {           name: 'Charles River Ventures',           permalink: 'charles-river-ventures'         },         person: null       },       {         financial_org: {           name: 'Union Square Ventures',           permalink: 'union-square-ventures'         },         person: null       },       {         financial_org: null,         person: {           first_name: 'Marc',           last_name: 'Andreessen',           permalink: 'marc-andreessen'         }       },       {         financial_org: null,         person: {           first_name: 'Dick',           last_name: 'Costolo',           permalink: 'dick-costolo'         }       },       {         financial_org: null,         person: {           first_name: 'Naval',           last_name: 'Ravikant',           permalink: 'naval-ravikant'         }       },       {         financial_org: null,         person: {           first_name: 'Ron',           last_name: 'Conway',           permalink: 'ron-conway'         }       },       {         financial_org: null,         person: {           first_name: 'Chris',           last_name: 'Sacca',           permalink: 'chris-sacca'         }       },       {         financial_org: null,         person: {           first_name: 'Greg',           last_name: 'Yaitanes',           permalink: 'greg-yaitanes'         }       },       {         financial_org: null,         person: {           first_name: 'Brian',           last_name: 'Pokorny',           permalink: 'brian-pokorny'         }       },       {         financial_org: { name: 'SV Angel', permalink: 'sv-angel' },         person: null       }     ]   },   {     round_code: 'e',     raised_amount: 5166511,     raised_currency_code: 'USD',     investments: []   },   {     round_code: 'b',     raised_amount: 9000000,     raised_currency_code: 'USD',     investments: [       {         financial_org: {           name: 'Charles River Ventures',           permalink: 'charles-river-ventures'         },         person: null       },       {         financial_org: { name: 'Redpoint Ventures', permalink: 'redpoint-ventures' },         person: null       },       {         financial_org: {           name: 'The Kinsey Hills Group',           permalink: 'kinsey-hills-group'         },         person: null       }     ]   } ] 
다음 쿼리 연산자를 사용하여 compound  embeddedDocuments 동일한 쿼리 에서 여러 수준의 중첩된 필드를 검색 .
- ``funding_rounds.raised_currency_code``와 일치해야 합니다. - USD
- funding_rounds.investments.financial_org.name을(를)- Trinity Ventures와(과) 일치시켜야 합니다.
funding_rounds.investments의 필드를 포함하여 객체의 funding_rounds 배열 내부에 저장된 모든 필드를 반환합니다. 결과 수를 5 funding_rounds 문서로 제한합니다.
1 db.companies.aggregate( 2   { 3     "$search": { 4       "compound": { 5         "must": [{ 6           "text": { 7             "path": "funding_rounds.raised_currency_code", 8             "query": "usd" 9           } 10         }], 11         "should": [{ 12           "phrase": { 13             "path": "funding_rounds.investments.financial_org", 14             "query": "Trinity Ventures", 15           } 16         }] 17       }, 18       "returnStoredSource": true, 19       "returnScope": { 20         "path": "funding_rounds" 21       } 22     } 23   }, 24   { 25     "$limit": 5 26   } 27 ) 
[   {     round_code: 'a',     raised_amount: 5250000,     raised_currency_code: 'USD',     investments: [       {         financial_org: {           name: 'Frazier Technology Ventures',           permalink: 'frazier-technology-ventures'         },         person: null       },       {         financial_org: { name: 'Trinity Ventures', permalink: 'trinity-ventures' },         person: null       }     ]   },   {     round_code: 'b',     raised_amount: 9500000,     raised_currency_code: 'USD',     investments: [       {         financial_org: { name: 'Accel Partners', permalink: 'accel-partners' },         person: null       },       {         financial_org: {           name: 'Frazier Technology Ventures',           permalink: 'frazier-technology-ventures'         },         person: null       },       {         financial_org: { name: 'Trinity Ventures', permalink: 'trinity-ventures' },         person: null       }     ]   },   {     round_code: 'c',     raised_amount: 25000000,     raised_currency_code: 'USD',     investments: [       {         financial_org: { name: 'DAG Ventures', permalink: 'dag-ventures' },         person: null       },       {         financial_org: { name: 'Accel Partners', permalink: 'accel-partners' },         person: null       },       {         financial_org: { name: 'Trinity Ventures', permalink: 'trinity-ventures' },         person: null       },       {         financial_org: {           name: 'Frazier Technology Ventures',           permalink: 'frazier-technology-ventures'         },         person: null       }     ]   },   {     round_code: 'angel',     raised_amount: 500000,     raised_currency_code: 'USD',     investments: [       {         financial_org: null,         person: {           first_name: 'Peter',           last_name: 'Thiel',           permalink: 'peter-thiel'         }       },       {         financial_org: null,         person: {           first_name: 'Reid',           last_name: 'Hoffman',           permalink: 'reid-hoffman'         }       }     ]   },   {     round_code: 'a',     raised_amount: 12700000,     raised_currency_code: 'USD',     investments: [       {         financial_org: { name: 'Accel Partners', permalink: 'accel-partners' },         person: null       },       {         financial_org: null,         person: {           first_name: 'Mark',           last_name: 'Pincus',           permalink: 'mark-pincus'         }       },       {         financial_org: null,         person: {           first_name: 'Reid',           last_name: 'Hoffman',           permalink: 'reid-hoffman'         }       }     ]   } ]