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.
Menu Docs

hasRoot Operador

hasRoot

O operador hasRoot pode ser usado para executar queries em campos de nível-raiz quando você especificar as opções returnScope e returnStoredSource.

hasRoot tem a seguinte sintaxe:

1{
2 $search: {
3 "index": "<index name>", // optional, defaults to "default"
4 "hasRoot": {
5 "operator": {
6 <operator-specification>
7 }
8 },
9 "returnScope": {
10 "path": "<embedded-documents-field-to-retrieve>"
11 },
12 "returnStoredSource": true,
13 }
14}
Campo
Tipo
Descrição
necessidade

operator

Objeto

Operador a ser usado para consultar um campo indexado. Isso especifica os critérios de pesquisa para filtrar os documentos secundários.

Obrigatório

Para usar este operador, você deve fazer o seguinte na definição do índice:

  • Indexe o campo no nível-raiz que você deseja para a query.

  • Indexe o array de objetos que você deseja recuperar como o tipo embeddedDocuments. Você também deve configurar storedSource para campos aninhados que deseja recuperar.

Na query, você deve fazer o seguinte:

  • Especifique returnScope para definir o escopo do campo a ser pesquisado pelo operador.

  • Defina returnStoredSource para true para retornar os campos storedSource.

Os exemplos desta seção usam o namespace 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 products, funding_rounds e funding_rounds.investments como o tipo embeddedDocuments.

  • Armazene os seguintes campos em mongot:

    • funding_rounds.raised_currency_code

    • funding_rounds.raised_amount

    • funding_rounds.investments

    • products.name

1{
2 "mappings": {
3 "dynamic": true,
4 "fields": {
5 "funding_rounds": {
6 "dynamic": true,
7 "fields": {
8 "investments": [
9 {
10 "dynamic": true,
11 "type": "embeddedDocuments"
12 }
13 ]
14 },
15 "storedSource": {
16 "include": [
17 "raised_currency_code",
18 "raised_amount",
19 "investments"
20 ]
21 },
22 "type": "embeddedDocuments"
23 },
24 "products": {
25 "dynamic": true,
26 "storedSource": {
27 "include": [
28 "name"
29 ]
30 },
31 "type": "embeddedDocuments"
32 }
33 }
34 }
35}

A query a seguir retorna products onde o campo de nível-raiz founded_year está entre os anos 2005 e 2010.

1db.companies.aggregate([
2 {
3 "$search": {
4 "returnStoredSource": true,
5 "returnScope": { "path": "products" },
6 "hasRoot": {
7 "operator": {
8 "range": {
9 "path": "founded_year",
10 "gte": 2005,
11 "lte": 2010
12 }
13 }
14 }
15 }
16 }
17])

A consulta a seguir pesquisa no campo name para a empresa nomeada Facebook usando o operador text para recuperar o valor investido (funding_rounds.raised_amount e funding_rounds.raised_currency_code) por todos os investidores (investments.person e investments.financial_org) da empresa.

1db.companies.aggregate([
2 {
3 "$search": {
4 "returnStoredSource": true,
5 "returnScope": { "path": "funding_rounds" },
6 "hasRoot": {
7 "operator": {
8 "text": {
9 "path": "name",
10 "query": "Facebook"
11 }
12 }
13 }
14 }
15 }
16])

A query a seguir pesquisa no campo funding_rounds.investments aninhado organizações financeiras com o termo Ventures (em qualquer lugar do campo name) que investiram em empresas descritas usando o termo network (em qualquer lugar do campo description). A query usa o operador composto para pesquisar:

  • Campo funding_rounds.investments.financial_org.name aninhado usando o operador embeddedDocument

  • Campo description de nível-raiz usando o operador hasRoot

O returnScope define o contexto para os operadores no campo do tipo funding_rounds embeddedDocuments e o campo returnStoredSource é configurado como true para retornar apenas os campos storedSource. A query limita os resultados a 5 documentos.

1db.companies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [
6 {
7 "embeddedDocument": {
8 "path": "funding_rounds.investments",
9 "operator": {
10 "wildcard": {
11 "path": "funding_rounds.investments.financial_org.name",
12 "query": "*Ventures*",
13 "allowAnalyzedField": true
14 }
15 }
16 }
17 },
18 {
19 "hasRoot": {
20 "operator": {
21 "wildcard": {
22 "path": "description",
23 "query": "*network*",
24 "allowAnalyzedField": true
25 }
26 }
27 }
28 }
29 ]
30 },
31 "returnScope": {"path": "funding_rounds"},
32 "returnStoredSource": true
33 }
34 },
35 {
36 "$limit": 5
37 }
38])