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, debe hacer 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 de esta sección utilizan el espacio de nombres sample_training.companies. Si carga el conjunto de datos de ejemplo y crea el índice en la colección, puede probar las consultas de ejemplo 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 realizar lo siguiente:
Indexe automáticamente todos los campos indexables dinámicos en la colección.
Indexe los campos
products,funding_roundsyfunding_rounds.investmentscomo los tipoembeddedDocuments.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 }
Consulta 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 consulta busca en el campo name la empresa llamada Facebook utilizando el operador text para recuperar la cantidad invertida (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 campo returnScope establece el contexto de los operadores en el campo de tipo funding_rounds embeddedDocuments, y el campo returnStoredSource se establece en true para devolver solo los campos storedSource. La consulta 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 } ] } ]