Definición
hasAncestorEl operador
hasAncestorconsulta un campo de tipoembeddedDocumentsque especifiques en elancestorPath. ElancestorPathes padre del campo que usted especifica en elreturnScope. ElreturnScopeespecifica el campo anidado, incluido el nivel de anidación, que deseas recuperar.Puedes usar este operador al puntuar y recuperar objetos dentro de matrices como documentos independientes para:
Filtrar en campos ancestrales (nivel de anidación superior).
Filtrar en los campos hermanos (igual nivel de anidamiento).
Sintaxis
El operador hasAncestor tiene la siguiente sintaxis:
1 { 2 $search: { 3 "index": "<index name>", // optional, defaults to "default" 4 "hasAncestor": { 5 "ancestorPath": "<embeddedDocuments-type-higher-level-field>", 6 "operator": { 7 <operator-specification> 8 } 9 }, 10 "returnScope": { 11 "path": "<embeddedDocuments-type-field-to-retrieve>" 12 } 13 } 14 }
Campos
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| String | Nombre del campo de tipo | Requerido |
| Objeto | Operador a utilizar para consultar el campo anidado dentro del campo tipo No puedes usar el operador | Requerido |
Requisitos
Para utilizar este operador, debe:
Indexar los campos ancestrales como el embeddedDocuments tipo. En la consulta, especifica
ancestorPathcomo este campo. Si el campo está en el nivel raíz, utiliza hasRoot.Especifique returnScope para establecer el alcance del documento a consultar y recuperar.
Ejemplos
Los ejemplos en esta sección usan el conjunto de datos sample_training.companies. Si cargas el dataset de muestra y creas el índice en la colección, puedes probar las queries de muestra demostradas 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
funding_roundsfunding_rounds.investmentscampos y como el tipo embeddedDocuments.Almacena los siguientes campos en
mongot:funding_rounds.investments.financial_orgfunding_rounds.investments.person
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { 5 "funding_rounds": { 6 "dynamic": true, 7 "fields": { 8 "investments": [ 9 { 10 "dynamic": true, 11 "storedSource": { 12 "include": [ 13 "financial_org", 14 "person" 15 ] 16 }, 17 "type": "embeddedDocuments" 18 } 19 ] 20 }, 21 "type": "embeddedDocuments" 22 } 23 } 24 } 25 }
Consulta de muestra
La siguiente query busca en el campo funding_rounds.founded_year empresas que fueron fundadas en el año 2005 utilizando el operador equals para recuperar detalles de inversión, como las organizaciones financieras o personas que invirtieron en las empresas.
1 db.companies.aggregate([ 2 { 3 "$search": { 4 "returnStoredSource": true, 5 "returnScope": { "path": "funding_rounds.investments" }, 6 "hasAncestor": { 7 "ancestorPath": "funding_rounds", 8 "operator": { 9 "equals": { 10 "path": "funding_rounds.funded_year", 11 "value": 2005 12 } 13 } 14 } 15 } 16 } 17 ])
[ { financial_org: { name: 'Frazier Technology Ventures', permalink: 'frazier-technology-ventures' }, person: null }, { financial_org: { name: 'Trinity Ventures', permalink: 'trinity-ventures' }, person: null }, { financial_org: { name: 'Accel Partners', permalink: 'accel-partners' }, person: null }, { financial_org: null, person: { first_name: 'Mark', last_name: 'Pincus', permalink: 'mark-pincus' } }, { financial_org: null, person: { first_name: 'Reid', last_name: 'Hoffman', permalink: 'reid-hoffman' } }, { financial_org: { name: 'First Round Capital', permalink: 'first-round-capital' }, person: null }, { financial_org: null, person: { first_name: 'Ram', last_name: 'Shriram', permalink: 'ram-shriram' } }, { financial_org: null, person: { first_name: 'Mitch', last_name: 'Kapor', permalink: 'mitch-kapor' } }, { financial_org: null, person: { first_name: 'Ron', last_name: 'Conway', permalink: 'ron-conway' } }, { financial_org: null, person: { first_name: 'Silvio', last_name: 'Scaglia', permalink: 'silvio-scaglia' } }, { financial_org: { name: 'Shelter Capital Partners', permalink: 'shelter-capital-partners' }, person: null }, { financial_org: { name: 'First Round Capital', permalink: 'first-round-capital' }, person: null }, { financial_org: { name: 'Liberty Associated Partners', permalink: 'liberty-associated-partners' }, person: null }, { financial_org: { name: 'Rose Tech Ventures', permalink: 'rose-tech-ventures' }, person: null }, { financial_org: { name: 'First Round Capital', permalink: 'first-round-capital' }, person: null }, { financial_org: { name: 'Lead Dog Ventures', permalink: 'lead-dog-ventures' }, person: null }, { financial_org: { name: 'Accel Partners', permalink: 'accel-partners' }, person: null }, { financial_org: { name: 'Benchmark', permalink: 'benchmark-2' }, person: null }, { financial_org: { name: 'Sequoia Capital', permalink: 'sequoia-capital' }, person: null }, { financial_org: null, person: null } ]