Docs Menu
Docs Home
/ /

hasRoot 연산자

hasRoot

returnScopereturnStoredSource 옵션을 지정할 때 hasRoot 연산자를 사용하여 루트 수준 필드를 쿼리할 수 있습니다.

hasRoot 의 구문은 다음과 같습니다:

1{
2 $search: {
3 "index": "<index name>", // optional, defaults to "default"
4 "hasRoot": {
5 "operator": {
6 <operator-specification>
7 }
8 },
9 "returnScope": {
10 "path": "<embedded-documents-field-to-retrieve>"
11 },
12 "returnStoredSource": true,
13 }
14}
필드
유형
설명
필요성

operator

객체

인덱스 필드 쿼리에 사용할 연산자입니다. 자식 문서를 필터링하기 위한 검색 기준을 지정합니다.

필수 사항

이 연산자를 사용하려면 인덱스 정의에서 다음 작업을 수행해야 합니다.

  • 쿼리할 루트 수준 필드를 인덱스합니다.

  • 조회할 객체 배열을 embeddedDocuments 유형으로 인덱싱합니다. 조회하려는 중첩 필드에 대해 storedSource를 구성해야 합니다.

쿼리에서 다음을 수행해야 합니다.

  • 연산자를 검색할 필드 범위를 설정하려면 returnScope를 지정합니다.

  • storedSource 필드를 반환하려면 returnStoredSourcetrue로 설정합니다.

이 섹션의 예시에서는 sample_training.companies 네임스페이스를 사용합니다. 샘플 데이터세트를 로드하고 컬렉션에 인덱스를 생성하면 이 섹션에서 설명하는 샘플 쿼리를 시도해 볼 수 있습니다.

이 섹션의 쿼리에서는 다음 인덱스를 사용합니다. 이 인덱스 정의는 MongoDB 검색을 다음 작업을 수행하도록 구성합니다.

  • 컬렉션에서 동적으로 인덱싱할 수 있는 모든 필드를 자동으로 인덱싱합니다.

  • products, funding_rounds, funding_rounds.investments 필드를 embeddedDocuments 유형으로 인덱스합니다.

  • mongot에 다음 필드를 저장합니다.

    • funding_rounds.raised_currency_code

    • funding_rounds.raised_amount

    • funding_rounds.investments

    • products.name

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "funding_rounds": {
6 "dynamic": true,
7 "fields": {
8 "investments": [
9 {
10 "dynamic": true,
11 "type": "embeddedDocuments"
12 }
13 ]
14 },
15 "storedSource": {
16 "include": [
17 "raised_currency_code",
18 "raised_amount",
19 "investments"
20 ]
21 },
22 "type": "embeddedDocuments"
23 },
24 "products": {
25 "dynamic": true,
26 "storedSource": {
27 "include": [
28 "name"
29 ]
30 },
31 "type": "embeddedDocuments"
32 }
33 }
34 }
35}

다음 쿼리는 루트 수준 필드 founded_year2005년과 2010년 사이에 있을 때 products을 반환합니다.

1db.companies.aggregate([
2 {
3 "$search": {
4 "returnStoredSource": true,
5 "returnScope": { "path": "products" },
6 "hasRoot": {
7 "operator": {
8 "range": {
9 "path": "founded_year",
10 "gte": 2005,
11 "lte": 2010
12 }
13 }
14 }
15 }
16 }
17])
[
{ name: 'Wikison Wetpaint' },
{ name: 'Wetpaint Social Distribution System' },
{ name: 'Omnidrive' },
{ name: 'Twitter Blocks' },
{ name: 'Twicco' },
{ name: 'Slacker Web Player' },
{ name: 'Slacker Desktop Radio' },
{ name: 'Slacker Portable Player' },
{ name: 'Babelgum' },
{ name: 'Powerset' },
{ name: 'OpenX Enterprise' },
{ name: 'OpenX Market' },
{ name: 'OpenX Lift' },
{ name: 'Sparter' },
{ name: 'Thoof' },
{ name: 'MyFree411' },
{ name: 'Wesabe' },
{ name: 'Prosper' },
{ name: 'Stickam' },
{ name: 'PayPerLive.com' }
]

다음 쿼리는 Facebook 이라는 회사의 name 필드를 text 연산자를 사용하여 검색하고, 모든 투자자(investments.personinvestments.financial_org)가 회사에 투자한 금액(funding_rounds.raised_amountfunding_rounds.raised_currency_code)을 조회합니다.

1db.companies.aggregate([
2 {
3 "$search": {
4 "returnStoredSource": true,
5 "returnScope": { "path": "funding_rounds" },
6 "hasRoot": {
7 "operator": {
8 "text": {
9 "path": "name",
10 "query": "Facebook"
11 }
12 }
13 }
14 }
15 }
16])
[
{
raised_amount: 500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: null,
person: {
first_name: 'Peter',
last_name: 'Thiel',
permalink: 'peter-thiel'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Reid',
last_name: 'Hoffman',
permalink: 'reid-hoffman'
}
}
]
},
{
raised_amount: 12700000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Accel Partners', permalink: 'accel-partners' },
person: null
},
{
company: null,
financial_org: null,
person: {
first_name: 'Mark',
last_name: 'Pincus',
permalink: 'mark-pincus'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Reid',
last_name: 'Hoffman',
permalink: 'reid-hoffman'
}
}
]
},
{
raised_amount: 27500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Greylock Partners', permalink: 'greylock' },
person: null
},
{
company: null,
financial_org: {
name: 'Meritech Capital Partners',
permalink: 'meritech-capital-partners'
},
person: null
},
{
company: null,
financial_org: { name: 'Founders Fund', permalink: 'founders-fund' },
person: null
},
{
company: null,
financial_org: { name: 'SV Angel', permalink: 'sv-angel' },
person: null
}
]
},
{
raised_amount: 240000000,
raised_currency_code: 'USD',
investments: [
{
company: { name: 'Microsoft', permalink: 'microsoft' },
financial_org: null,
person: null
}
]
},
{
raised_amount: 60000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: null,
person: {
first_name: 'Li',
last_name: 'Ka-shing',
permalink: 'li-ka-shing'
}
},
{
company: null,
financial_org: { name: 'Horizons Ventures', permalink: 'horizons-ventures' },
person: null
}
]
},
{
raised_amount: 15000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'European Founders Fund',
permalink: 'european-founders-fund'
},
person: null
}
]
},
{
raised_amount: 100000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'TriplePoint Capital',
permalink: 'triplepoint-capital'
},
person: null
}
]
},
{
raised_amount: 60000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: null,
person: {
first_name: 'Li',
last_name: 'Ka-shing',
permalink: 'li-ka-shing'
}
},
{
company: null,
financial_org: { name: 'Horizons Ventures', permalink: 'horizons-ventures' },
person: null
}
]
},
{
raised_amount: 200000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'Digital Sky Technologies',
permalink: 'digital-sky-technologies-fo'
},
person: null
}
]
},
{
raised_amount: 210000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Elevation Partners', permalink: 'elevation-partners' },
person: null
}
]
},
{
raised_amount: 1500000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Goldman Sachs', permalink: 'goldman-sachs' },
person: null
},
{
company: null,
financial_org: {
name: 'Digital Sky Technologies',
permalink: 'digital-sky-technologies-fo'
},
person: null
}
]
}
]

다음 쿼리는 중첩된 funding_rounds.investments 필드에서 name 필드 내 어디에서든 Ventures라는 텀을 가진 금융 조직을 검색하며, 이 조직은 description 필드 내 어디에서든 network라는 텀으로 설명된 회사에 투자한 것입니다. 쿼리는 compound 연산자를 사용하여 다음을 검색합니다.

  • embeddedDocument 연산자를 사용하여 중첩된 funding_rounds.investments.financial_org.name 필드

  • 루트 수준 description 필드에 hasRoot 연산자 사용

returnScope는 연산자의 컨텍스트를 funding_rounds embeddedDocuments 유형 필드로 설정하며, returnStoredSource 필드는 true로 설정되어 storedSource 필드만 반환합니다. 이 쿼리는 결과 목록을 5개의 문서로 제한합니다.

1db.companies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [
6 {
7 "embeddedDocument": {
8 "path": "funding_rounds.investments",
9 "operator": {
10 "wildcard": {
11 "path": "funding_rounds.investments.financial_org.name",
12 "query": "*Ventures*",
13 "allowAnalyzedField": true
14 }
15 }
16 }
17 },
18 {
19 "hasRoot": {
20 "operator": {
21 "wildcard": {
22 "path": "description",
23 "query": "*network*",
24 "allowAnalyzedField": true
25 }
26 }
27 }
28 }
29 ]
30 },
31 "returnScope": {"path": "funding_rounds"},
32 "returnStoredSource": true
33 }
34 },
35 {
36 "$limit": 5
37 }
38])
[
{
raised_amount: 6500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'Velocity Interactive Group',
permalink: 'velocity-interactive-group'
},
person: null
},
{
company: null,
financial_org: { name: 'TELUS Ventures', permalink: 'telus-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'Charles River Ventures',
permalink: 'charles-river-ventures'
},
person: null
},
{
company: null,
financial_org: {
name: 'Partech Ventures',
permalink: 'partech-international'
},
person: null
},
{
company: null,
financial_org: { name: 'Fidelity Ventures', permalink: 'fidelity-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Star Ventures', permalink: 'star-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Castile Ventures', permalink: 'castile-ventures' },
person: null
}
]
},
{
raised_amount: 25000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Boulder Ventures', permalink: 'boulder-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Sequel Venture Partners', permalink: 'sequel' },
person: null
},
{
company: null,
financial_org: { name: 'Sprout Group', permalink: 'the-sprout-group' },
person: null
},
{
company: null,
financial_org: { name: 'EPIC Ventures', permalink: 'epic-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'Garage Technology Ventures',
permalink: 'garage-technology-ventures'
},
person: null
},
{
company: null,
financial_org: {
name: 'Pritzker Group Venture Capital',
permalink: 'pritzker-group-venture-capital'
},
person: null
},
{
company: null,
financial_org: { name: 'Ironside Ventures', permalink: 'ironside-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Valhalla Partners', permalink: 'valhalla-partners' },
person: null
},
{
company: null,
financial_org: { name: 'Vista Ventures', permalink: 'vista-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'JPMorgan Chase & Co', permalink: 'jpmorgan-chase-co' },
person: null
},
{
company: null,
financial_org: {
name: 'DFJ Portage Ventures',
permalink: 'dfj-portage-ventures'
},
person: null
}
]
},
{
raised_amount: 49500000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: { name: 'Versant Ventures', permalink: 'versant-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Skyline Ventures', permalink: 'skyline-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'Three Arch Partners',
permalink: 'three-arch-partners'
},
person: null
},
{
company: null,
financial_org: {
name: 'Affinity Capital Management',
permalink: 'affinity-capital-management'
},
person: null
},
{
company: null,
financial_org: { name: 'Alloy Ventures', permalink: 'alloy-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Delphi Ventures', permalink: 'delphi-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'GBS Ventures', permalink: 'gbs-ventures' },
person: null
},
{
company: null,
financial_org: {
name: 'INVESCO Private Capital',
permalink: 'invesco-private-capital'
},
person: null
},
{
company: null,
financial_org: {
name: 'J.P. Morgan Securities Inc.',
permalink: 'j-p-morgan-securities-inc'
},
person: null
},
{
company: null,
financial_org: { name: 'ONSET Ventures', permalink: 'onset-ventures' },
person: null
}
]
},
{
raised_amount: 1400000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'Accelerator Ventures',
permalink: 'accelerator-ventures'
},
person: null
},
{
company: null,
financial_org: { name: 'JAIC America', permalink: 'jaic-america' },
person: null
},
{
company: null,
financial_org: {
name: 'Pacific I&T Ventures',
permalink: 'pacific-i-t-ventures'
},
person: null
},
{
company: null,
financial_org: null,
person: {
first_name: 'Eric',
last_name: 'Di Benedetto',
permalink: 'eric-di-benedetto'
}
},
{
company: null,
financial_org: {
name: 'iSteps App Ventures',
permalink: 'isteps-app-ventures'
},
person: null
},
{
company: null,
financial_org: null,
person: {
first_name: 'Ben T.',
last_name: 'Smith, IV',
permalink: 'ben-smith-iv'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Tim',
last_name: 'Stevens',
permalink: 'tim-stevens'
}
},
{
company: null,
financial_org: null,
person: {
first_name: 'Fabrice',
last_name: 'Grinda',
permalink: 'fabrice-grinda'
}
},
{
company: null,
financial_org: { name: 'LaunchCapital', permalink: 'launchcapital' },
person: null
}
]
},
{
raised_amount: 1000000,
raised_currency_code: 'USD',
investments: [
{
company: null,
financial_org: {
name: 'DFJ Gotham Ventures',
permalink: 'dfj-gotham-ventures'
},
person: null
},
{
company: null,
financial_org: {
name: 'Metamorphic Ventures',
permalink: 'metamorphic-ventures-llc'
},
person: null
},
{
company: null,
financial_org: { name: 'RRE Ventures', permalink: 'rre-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Pilot Group', permalink: 'pilot-group' },
person: null
},
{
company: null,
financial_org: { name: 'AOL Ventures', permalink: 'aol-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Lerer Ventures', permalink: 'lerer-ventures' },
person: null
},
{
company: null,
financial_org: { name: 'Bowery Capital', permalink: 'bowery-capital' },
person: null
}
]
}
]

돌아가기

hasAncestor

이 페이지의 내용