Docs Menu
Docs Home
/ /

hasAncestor Operador

hasAncestor

El operador hasAncestor consulta un campo de tipo embeddedDocuments especificado en ancestorPath. ancestorPath es el padre del campo especificado en returnScope. returnScope especifica 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).

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

ancestorPath

String

Nombre del campo de tipo embeddedDocuments que es un ancestro intermedio del campo anidado utilizado en la consulta. Este es el documento principal que evalúa el operador.

Requerido

operator

Objeto

Operador que se utiliza para consultar el campo anidado dentro del campo de tipo embeddedDocuments especificado en ancestorPath. La ruta de consulta debe ser un elemento secundario de ancestorPath, independientemente del nivel de anidación. Esto especifica los criterios de búsqueda para filtrar el documento principal.

No se puede utilizar el operador hasAncestor dentro de la especificación del operador.

Requerido

Para utilizar este operador, debes:

  • Indexar los campos ancestrales como TipoembeddedDocuments. En la consulta, especifique ancestorPath como 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.

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.

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_rounds funding_rounds.investments campos y como el tipo embeddedDocuments.

  • Almacene los siguientes campos en mongot:

    • funding_rounds.investments.financial_org

    • funding_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}

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.

1db.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 }
]

Volver

geoWithin

En esta página