Definición
Sintaxis
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 }
Campos
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| Objeto | Operador para utilizar en la query de un campo indexado. Esto especifica los criterios de búsqueda para filtrar los documentos secundarios. | Requerido |
Requisitos
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 configurarstoredSourcepara los campos anidados que desea recuperar.
En la query, debes hacer lo siguiente:
Especifique
returnScopepara definir o escopo do campo na búsqueda pelo operador.Establece
returnStoredSourceentruepara devolver los camposstoredSource.
Ejemplos
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.
Índice de muestra
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_roundsyfunding_rounds.investmentscomo los tipo embeddedDocuments.Almacena los siguientes campos en
mongot:funding_rounds.raised_currency_codefunding_rounds.raised_amountfunding_rounds.investmentsproducts.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 }
Query simple
La siguiente consulta devuelve products donde el campo de nivel raíz founded_year se encuentra entre los años 2005 y 2010.
1 db.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' } ]
Multi-Level query
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.
1 db.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 } ] } ]
Compound query
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.nameusando el operadorembeddedDocumentCampo
descriptionde nivel raíz que utiliza el operadorhasRoot
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.
1 db.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 } ] } ]