Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

hasRoot Operador

hasRoot

El operador hasRoot puede utilizarse para query campos de nivel raíz cuando se especifican las opciones returnScope y returnStoredSource.

hasRoot tiene la siguiente sintaxis:

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
Descripción
Necesidad

operator

Objeto

Operador para utilizar en la query de un campo indexado. Esto especifica los criterios de búsqueda para filtrar los documentos secundarios.

Requerido

Para utilizar este operador, debes realizar lo siguiente en la definición del índice:

  • Indexa el campo de nivel raíz que quieres query.

  • Indexa el arreglo de objetos que deseas recuperar con el tipo embeddedDocuments. También debe configurar storedSource para los campos anidados que desea recuperar.

En la query, debes hacer lo siguiente:

  • Especifique returnScope para definir o escopo do campo na búsqueda pelo operador.

  • Establece returnStoredSource en true para devolver los campos storedSource.

Los ejemplos en esta sección utilizan el namespace sample_training.companies. Si cargas el conjunto de datos de muestra y creas el índice en la colección, puedes probar las consultas de muestra que se muestran en esta sección.

Las consultas de esta sección utilizan el siguiente índice. Esta definición de índice configura MongoDB Search para que haga lo siguiente:

  • Indexe automáticamente todos los campos indexables dinámicos en la colección.

  • Indexe los campos products, funding_rounds y funding_rounds.investments como los tipo embeddedDocuments.

  • Almacena los siguientes campos en 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}

La siguiente consulta devuelve products donde el campo de nivel raíz founded_year se encuentra entre los años 2005 y 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' }
]

La siguiente query busca en el campo name la empresa denominada Facebook utilizando el operador text para recuperar el monto invertido (funding_rounds.raised_amount y funding_rounds.raised_currency_code) por todos los inversores (investments.person y investments.financial_org) en la 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
}
]
}
]

La siguiente query busca en el campo anidado funding_rounds.investments organizaciones financieras con el término Ventures (en cualquier parte del campo name) que hayan invertido en empresas descritas con el término network (en cualquier parte del campo description). La query utiliza el operador compuesto para buscar en:

  • Campo anidado funding_rounds.investments.financial_org.name usando el operador embeddedDocument

  • Campo description de nivel raíz que utiliza el operador hasRoot

El returnScope establece el contexto para que los operadores pasen al campo de tipo funding_rounds embeddedDocuments, y el campo returnStoredSource se establece en true para devolver solo los campos storedSource. La query limita los 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
}
]
}
]

Volver

hasAncestor

En esta página