Menu Docs
Página inicial do Docs
/ /

hasRoot Operador

hasRoot

O operador hasRoot pode ser usado para consultar campos de nível raiz quando você especifica as opções returnScope e returnStoredSource.

hasRoot tem a seguinte sintaxe:

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}
Campo
Tipo
Descrição
necessidade

operator

Objeto

Operador a ser usado para fazer query de um campo indexado. Isto especifica os critérios de pesquisa para filtrar os documentos filhos.

Obrigatório

Para utilizar este operador, você deve fazer o seguinte na definição de índice:

  • Indexe o campo de nível raiz que você deseja fazer a query.

  • Indexe a array de objetos que você deseja recuperar como o tipo embeddedDocuments. Você também deve configurar storedSource para campos aninhados que deseja recuperar.

Na query, você deve fazer o seguinte:

  • Especifique returnScope para definir o escopo do campo para pesquisar o operador.

  • Defina returnStoredSource como true para retornar os campos storedSource.

Os exemplos nesta seção utilizam o namespace sample_training.companies. Se você carregar o conjunto de dados de amostra e criar o índice na coleção, poderá tentar as queries de amostra demonstradas nesta seção.

As queries nesta seção utilizam o seguinte índice. Esta definição de índice configura o MongoDB Search para fazer o seguinte:

  • Indexe automaticamente todos os campos dinamicamente indexáveis na coleção.

  • Indexe os products funding_rounds funding_rounds.investments campos, e como o tipo embeddedDocuments.

  • Armazene os seguintes campos em 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}

A seguinte query retorna products onde o campo de nível raiz founded_year está entre os anos 2005 e 2010.

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' }
]

A consulta a seguir pesquisa o campo name da empresa chamada Facebook usando o operador text para recuperar o valor aplicado (funding_rounds.raised_amount e funding_rounds.raised_currency_code) por todos os Investidores (investments.person e investments.financial_org) em a empresa.

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
}
]
}
]

A consulta a seguir funding_rounds.investments pesquisa no campo aninhado para organizações financeiros com o termo Ventures (em qualquer lugar no name campo ) que aplicaram em empresas descritas no termo network (em qualquer lugar no description campo ). A query usa o operador composto para pesquisar:

  • campo funding_rounds.investments.financial_org.name aninhado utilizando o operador embeddedDocument

  • campo de nível raiz description usando o operador hasRoot

O returnScope define o contexto dos operadores para o campo de tipo funding_rounds embeddedDocuments e o campo returnStoredSource é definido como true para retornar somente os campos storedSource. A query limita os resultados a 5 documentos.

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
}
]
}
]

Voltar

hasAncestor

Nesta página