Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

hasAncestor Operador

hasAncestor

O operador hasAncestor consulta um campo do tipo embeddedDocuments que você especifica no ancestorPath. O ancestorPath é o campo principal que você especifica no returnScope. O returnScope especifica o campo aninhado, incluindo o nível de aninhamento, que você deseja recuperar.

Você pode usar este operador ao pontuar e recuperar objetos dentro de arrays como documentos independentes para:

  • Filtrar em campos ancestrais (nível mais alto de aninhamento).

  • Filtre em campos irmãos (nível igual de aninhamento).

O operador hasAncestor tem a seguinte sintaxe:

{ $search: { "index": "<index name>", // optional, defaults to "default" "hasAncestor": { "ancestorPath": "<embeddedDocuments-type-higher-level-field>", "operator": { <operator-specification> } }, "returnScope": { "path": "<embeddedDocuments-type-field-to-retrieve>" } }}
Campo
Tipo
Descrição
necessidade

ancestorPath

String

Nome do campo do tipo embeddedDocuments que é um ancestral intermediário do campo aninhado usado na query. Este é o documento principal que o operador avalia.

Obrigatório

operator

Objeto

Operador a ser usado para query o campo aninhado dentro do campo do tipo embeddedDocuments especificado no ancestorPath. O caminho da query deve ser um secundário do ancestorPath, independentemente do nível de aninhamento. Isso especifica os critérios de pesquisa para o filtro do documento principal.

Você não pode usar o operador hasAncestor dentro da especificação do operador.

Obrigatório

Para usar este operador, você deve:

  • Índice os campos ancestrais como o tipo embeddedDocuments. Na query, especifique ancestorPath como este campo. Se o campo estiver no nível raiz, use hasRoot.

  • Especifique returnScope para definir o escopo do documento para consultar e recuperar.

Os exemplos nesta seção usam o conjunto de dados sample_training.companies. Se você carregar o conjunto de dados de amostra e criar o índice na coleção, pode tentar as queries de amostra demonstradas nesta seção.

As queries nesta seção usam o seguinte índice. Esta definição de índice configura o MongoDB Search para fazer o seguinte:

  • Indexe automaticamente todos os campos dinamicamente indexáveis na coleção.

  • Indexe os campos funding_rounds e funding_rounds.investments como o tipo embeddedDocuments.

  • Armazene os seguintes campos em mongot:

    • funding_rounds.investments.financial_org

    • funding_rounds.investments.person

{ "mappings": { "dynamic": true, "fields": { "funding_rounds": { "dynamic": true, "fields": { "investments": [ { "dynamic": true, "storedSource": { "include": [ "financial_org", "person" ] }, "type": "embeddedDocuments" } ] }, "type": "embeddedDocuments" } } }}

A query a seguir pesquisa o campo funding_rounds.founded_year para empresas fundadas no ano 2005 usando o operador equals para recuperar detalhes de investimento, como as organizações financeiras ou indivíduos que investiram nas empresas.

db.companies.aggregate([ { "$search": { "returnStoredSource": true, "returnScope": { "path": "funding_rounds.investments" }, "hasAncestor": { "ancestorPath": "funding_rounds", "operator": { "equals": { "path": "funding_rounds.funded_year", "value": 2005 } } } } }])
[ { 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 }]