Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

hasAncestor Operador

hasAncestor

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

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 query. Éste es el documento principal que el operador evalúa.

Requerido

operator

Objeto

Operador a utilizar para consultar el campo anidado dentro del campo tipo embeddedDocuments especificado en el ancestorPath. La ruta de query debe ser un subelemento de ancestorPath, independientemente del nivel de anidamiento. Esto especifica los criterios de búsqueda para filtrar el documento principal.

No puedes usar el operador hasAncestor dentro de la especificación del operador.

Requerido

Para utilizar este operador, debe:

  • Indexar los campos ancestrales como el embeddedDocuments tipo. En la consulta, especifica ancestorPath como 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.

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:

  • Indexe automáticamente todos los campos indexables dinámicos en la colección.

  • Indexe los funding_rounds funding_rounds.investments campos y como el tipo embeddedDocuments.

  • Almacena 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 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.

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