Definición
hasAncestorEl operador
hasAncestorconsulta un campo de tipoembeddedDocumentsespecificado enancestorPath.ancestorPathes el padre del campo especificado enreturnScope.returnScopeespecifica el campo anidado, incluido el nivel de anidación, que desea recuperar.Puedes usar este operador al puntuar y recuperar objetos dentro de matrices como documentos independientes para:
Filtro por campos ancestrales (nivel superior de anidamiento).
Filtrar por campos hermanos (igual nivel de anidación).
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 que se utiliza para consultar el campo anidado dentro del campo de tipo No se puede utilizar el operador | Requerido |
Requisitos
Para utilizar este operador, debes:
Indexar los campos ancestrales como TipoembeddedDocuments. En la consulta, especifique
ancestorPathcomo este campo. Si el campo está en el nivel raíz, use 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:
Indexa automáticamente todos los campos indexables dinámicamente en la colección.
Indexe los
funding_roundsfunding_rounds.investmentscampos y como el tipo embeddedDocuments.Almacene 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 consulta busca en el campo funding_rounds.founded_year empresas que se fundaron en el año 2005 utilizando el operador equals para recuperar detalles de inversión, como las organizaciones financieras o las 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 } ]