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.

facet ( Operador de pesquisa MongoDB )

facet

O coletor facet agrupa resultados por valores ou intervalos nos campos facetados especificados e retorna a contagem para cada um desses grupos.

Você pode usar facet com os estágios $search e $searchMeta. O MongoDB recomenda utilizar o facet com o estágio $searchMeta para recuperar os resultados de metadados somente para a query. Para recuperar resultados de metadados e de query usando o estágio $search, você deve usar a variável de agregação $$SEARCH_META. Consulte Variável de agregação SEARCH_META para saber mais.

Se você definir storedSource na definição do tipo de campo embeddedDocuments, poderá usar returnScope com returnStoredSource para fazer facetas em campos aninhados dentro de um array de objetos. Caso contrário, você só poderá fazer facetas no campo-raiz do tipo embeddedDocuments. Para um exemplo de facetas em:

facet tem a seguinte sintaxe:

{ "$searchMeta"|"$search": { "index": <index name>, // optional, defaults to "default" "facet": { "operator": { <operator-specifications> }, "facets": { <facet-definitions> } }, "returnScope": { "path": "<embedded-documents-field-to-query>" }, "returnStoredSource": true }}
Campo
Tipo
Obrigatório?
Descrição

facets

documento

sim

Informações para agrupar os dados de cada faceta. Você deve especificar pelo menos uma Definição de faceta. Cada definição de faceta também pode especificar Agregações de faceta para calcular métricas para cada bucket.

operator

documento

no

Operador para usar para executar a faceta . Se omitido, o MongoDB Search executa a faceta sobre todos os documentos na coleção.

As query de faceta consomem muita memória, independentemente da camada do cluster. As query que especificam agregação de faceta ou facetas aninhadas exigem mais memória e disco do que outras query de faceta. Antes de usar facetas em produção, confirme se o cluster tem memória suficiente para sua carga de trabalho. Para aprender mais, consulte Gerenciamento de memória de pesquisa. Para obter orientação de dimensionamento para sua carga de trabalho, solicitação suporte.

A memória que uma query de faceta exige depende do número de valores únicos no campo em que você aplica a faceta, e não do número de buckets que você faz solicitação usando numBuckets ou boundaries. Por exemplo, uma faceta que solicita 20 buckets em um campo com cinco milhões de valores exclusivos ainda conta cada valor exclusivo para determinar os 20 principais buckets.

Para facetas aninhadas, o total de valores exclusivos calculados em uma query é multiplicado com base nos valores exclusivos em cada nível de aninhamento. Mesmo quando cada campo individual tem baixa cardinalidade, a combinação de valores em caminhos aninhados pode produzir um grande número de buckets exclusivos. Para aprender mais sobre como as facetas aninhadas multiplicam os buckets, consulte Facetas Aninhadas.

O MongoDB Search acompanha as contagens de bucket separadamente para cada query, portanto, o uso total de memória é dimensionado com o número de queries de faceta simultâneas. Em um cluster sharded, o MongoDB Search também requer memória para mesclar os buckets de cada shard, que é dimensionada com o número de shards e o número de buckets.

O documento de definição do faceta contém o nome do faceta e as opções específicas para um tipo de faceta. A pesquisa do MongoDB suporta os seguintes tipos de facetas:

Importante

stringFacet agora está desatualizado. Em vez disso, use o token, que fornece faceta aprimorada.

Para aprender mais sobre as diferenças entre os tipos de campo atualizados e desatualizados para faceta, consulte Comparando Tipos de Campo para Faceta.

As facetas de string permitem restringir os resultados do MongoDB Search com base nos valores de string mais frequentes no campo de string especificado. O campo string deve ser índice como token. Para atribuir facetas aos campos string em documentos incorporados, você também deve criar um índice para os campos principais como o tipo de documento. Quando você usa facetas em strings, em arrays ou documentos incorporados, o MongoDB Search retorna contagens de facetas com base no número de documentos raiz correspondentes.

Os facets de string têm a seguinte sintaxe:

{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "string", "path" : "<field-path>", "numBuckets" : <number-of-categories>, "embeddedDocument": { <embedded-document-scope> } // optional } } } }}
Opção
Tipo
Descrição
Obrigatório?

embeddedDocument

objeto

Limita as contagens de bucket da faceta apenas aos documento filhos de um array embeddedDocuments que correspondem a um predicado de query. Para aprender mais, consulte faceta on Matching Children de documentos incorporados array.

no

numBuckets

int

Número máximo de categorias de facetas para retornar nos resultados. O valor deve ser menor ou igual a 10000. Se especificado, o MongoDB Search poderá retornar menos categorias do que o solicitado se os dados forem agrupados em menos categorias do que o número solicitado. Se omitido, padrão para 10, o que significa que o MongoDB Search retornará somente as 10 principais categorias de faceta por contagem.

no

path

string

Caminho do campo para a faceta. Você pode especificar um campo que é indexado como um token.

sim

type

string

Tipo de facet. O valor deve ser string.

sim

Exemplo

O exemplo a seguir usa um índice chamado default na coleção sample_mflix.movies. O campo genres na coleção é indexado como o tipo token e o campo year é indexado como o tipo número.

{ "mappings": { "dynamic": false, "fields": { "genres": { "type": "token" }, "year": { "type": "number" } } }}

A query utiliza o estágio $searchMeta para pesquisar o campo year na coleção movies para filmes de 2000 a 2015 e recuperar uma contagem do número de filmes em cada gênero.

db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "year", "gte": 2000, "lte": 2015 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" } } } } }])

Para saber mais sobre esses resultados, consulte Resultados de faceta.

Importante

numberFacet agora está desatualizado. Em vez disso, use o número, que fornece faceta melhorada.

Para aprender mais sobre as diferenças entre os tipos de campo atualizados e desatualizados para faceta, consulte Comparando Tipos de Campo para Faceta.

As facets numéricas permitem determinar a frequência dos valores numéricos nos resultados da pesquisa, dividindo os resultados em intervalos separados de números. Quando você faceta números em arrays ou documentos incorporados, o MongoDB Search retorna contagens de faceta com base no número de documentos raiz correspondentes.

Os facets numéricos têm a seguinte sintaxe:

{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "number", "path" : "<field-path>", "boundaries" : <array-of-numbers>, "default": "<bucket-name>", "embeddedDocument": { <embedded-document-scope> } // optional } } } }}
Opção
Tipo
Descrição
Obrigatório?

boundaries

array de números

Lista de valores numéricos em ordem crescente que especificam os limites para seus buckets. Você deve especificar entre dois e dez mil ([2, 10000]) valores de limite. Cada par adjacente de valores define um bucket com um limite inferior inclusivo e um limite superior exclusivo. Você pode especificar qualquer combinação de valores dos seguintes BSON types:

  • Inteiro de int32 bits ()

  • Inteiro de 64 bits (int64)

  • Ponto flutuante binário de 64 bits (double

sim

default

string

Nome de um compartimento adicional que conta os documentos retornados do operador que não se enquadram nos limites especificados. Se omitido, a Pesquisa do MongoDB também inclui os resultados do operador de faceta que não se enquadram em um bucket especificado, mas não o inclui em nenhuma contagem de bucket.

no

embeddedDocument

objeto

Limita as contagens de bucket da faceta apenas aos documento filhos de um array embeddedDocuments que correspondem a um predicado de query. Para aprender mais, consulte faceta on Matching Children de documentos incorporados array.

no

path

string

Caminho do campo para a faceta. Você pode especificar um campo que é indexado como o tipo número.

sim

type

string

Tipo de facet. O valor deve ser number.

sim

Exemplo

O exemplo a seguir usa um índice chamado default na coleção sample_mflix.movies. O campo year na coleção é indexado como o tipo número.

{ "mappings": { "dynamic": false, "fields": { "year": [ { "type": "number" } ] } }}

A query usa o estágio $searchMeta para pesquisar o campo year na coleção movies para filmes entre os anos 1980 e 2000 e recuperar resultados de metadados para a query. A query especifica três buckets:

  • 1980, limite inferior inclusivo para este bucket

  • 1990, limite superior exclusivo para o bucket 1980 e limite inferior inclusivo para este bucket

  • 2000, limite superior exclusivo para o bucket 1990

A query também especifica um bucket de default chamado other para recuperar resultados da query que não se enquadram em nenhum dos limites especificados.

db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "year", "gte": 1980, "lte": 2000 } }, "facets": { "yearFacet": { "type": "number", "path": "year", "boundaries": [1980,1990,2000], "default": "other" } } } } }])

Para saber mais sobre esses resultados, consulte Resultados de faceta.

Importante

dateFacet agora está desatualizado. Em vez disso, use a data, que fornece faceta melhorada.

Para aprender mais sobre as diferenças entre os tipos de campo atualizados e desatualizados para faceta, consulte Comparando Tipos de Campo para Faceta.

As facets de datas permitem restringir resultados de pesquisa com base em uma data. Quando você faceta datas em arrays ou documentos incorporados, o MongoDB Search retorna contagens de faceta com base no número de documentos raiz correspondentes.

Os facets de data têm a seguinte sintaxe:

{ "$searchMeta": { "facet":{ "operator": { <operator-specification> }, "facets": { "<facet-name>" : { "type" : "date", "path" : "<field-path>", "boundaries" : <array-of-dates>, "default": "<bucket-name>", "embeddedDocument": { <embedded-document-scope> } // optional } } } }}
Opção
Tipo
Descrição
Obrigatório?

boundaries

array de números

Lista de valores de data que especificam os limites para cada bucket. Você deve especificar:

  • Pelo menos dois limites, que são menores ou iguais a dez mil ([2, 10000])

  • Valores em ordem crescente, com a data mais antiga primeiro

Cada par adjacente de valores atua como o limite inferior inclusivo e o limite superior exclusivo para o bucket.

sim

default

string

Nome de um compartimento adicional que conta os documentos retornados do operador que não se enquadram nos limites especificados. Se omitido, o MongoDB Search incluirá os resultados do operador de faceta que também não se enquadram em um bucket especificado, mas o MongoDB Search não incluirá esses resultados em nenhuma contagem de bucket.

no

embeddedDocument

objeto

Limita as contagens de bucket da faceta apenas aos documento filhos de um array embeddedDocuments que correspondem a um predicado de query. Para aprender mais, consulte faceta on Matching Children de documentos incorporados array.

no

path

string

Caminho do campo para a faceta. Você pode especificar um campo que é indexado como um tipo de data.

sim

type

string

Tipo de facet. O valor deve ser date.

sim

Exemplo

O exemplo a seguir usa um índice chamado default na coleção sample_mflix.movies. O campo released na coleção é indexado como tipo data.

{ "mappings": { "dynamic": false, "fields": { "released": [ { "type": "date" } ] } }}

A query usa o estágio $searchMeta para pesquisar o campo released na coleção movies para filmes entre os anos 2000 e 2015 e recuperar resultados de metadados para a query. A query especifica quatro buckets:

  • 2000-01-01, limite inferior inclusivo para este bucket

  • 2005-01-01, limite superior exclusivo para o bucket 2000-01-01 e limite inferior inclusivo para este bucket

  • 2010-01-01, limite superior exclusivo para o bucket 2005-01-01 e limite inferior inclusivo para este bucket

  • 2015-01-01, limite superior exclusivo para o bucket 2010-01-01

A query também especifica um bucket de default chamado other para recuperar resultados da query que não se enquadram em nenhum dos limites especificados.

db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "range": { "path": "released", "gte": ISODate("2000-01-01T00:00:00.000Z"), "lte": ISODate("2015-01-31T00:00:00.000Z") } }, "facets": { "yearFacet": { "type": "date", "path": "released", "boundaries": [ISODate("2000-01-01"), ISODate("2005-01-01"), ISODate("2010-01-01"), ISODate("2015-01-01")], "default": "other" } } } } }])

Para saber mais sobre esses resultados, consulte Resultados de faceta.

Os tipos de campo de pesquisa atualizados do MongoDB fornecem funcionalidade aprimorada para suporte a faceta em comparação com os tipos desatualizados (stringFacet, numberFacet, dateFacet). A tabela a seguir descreve as principais diferenças na funcionalidade:

Categoria faceta
Tipo de campo atualizado
Tipo de faceta desatualizado
Principais diferenças

String

stringFacet (desatualizado)

Suporte a normalizadores: O tipo token oferece suporte a normalizadores que transformam buckets de facetas. Por exemplo, com normalizer: lowercase, "ADIDAS" e "adidas" contam para o mesmo bucket, enquanto stringFacet os trata como buckets separados.

Numérico

numberFacet (desatualizado)

Suporte a array: O tipo number considera valores dentro de arrays para buckets de facetas. Por exemplo, um documento com um valor de array [0, 10] conta para ambos os buckets [1, 5] e [6, 10], enquanto numberFacet ignora completamente os valores de array.

Data

dateFacet (desatualizado)

Suporte a array: o tipo date considera valores dentro de arrays para buckets de faceta. Por exemplo, um valor de array com datas pode contribuir para várias faixas de intervalo de datas, enquanto o dateFacet ignora completamente os valores de array.

Observação

Quando os tipos de campo desatualizados e atualizados são definidos para o mesmo campo, os tipos de faceta desatualizados têm precedência. Por exemplo, se token e stringFacet forem definidos para um campo, o cálculo de faceta usará o mapeamento stringFacet .

Cada definição de faceta pode incluir um campo embeddedDocument opcional que limita as contagens de bucket da faceta apenas aos documentos filhos em um array embeddedDocuments que correspondem a um predicado de query. Se você omitir o campo embeddedDocument, a faceta será indexada por documento.

Sem embeddedDocument, um documento raiz conta em um bucket se ele tiver qualquer documento filho que se encaixe nesse bucket, mesmo que esse filho não corresponda à query definida no bloco facet.operator. O campo embeddedDocument restringe as contribuições do bucket apenas aos filhos que correspondem à embeddedDocument.operator especificada. Ele conta cada documento raiz no máximo uma vez por bucket.

O campo embeddedDocument usa os seguintes campos:

Campo
Tipo
Descrição
Obrigatório?

path

string

Campo com índice do tipo embeddedDocuments para definir o escopo da faceta. O path da faceta deve ser um descendente deste campo.

sim

operator

objeto

Operador para executar em cada documento filho no array embeddedDocuments que você especifica em path. Apenas documentos filho que correspondem a este operador contribuem para as contagens de bucket da faceta. Cada caminho referenciado neste operador deve ser um descendente de path.

sim

Para uma faceta de número ou data, um filho correspondente cujo valor cai fora da boundaries configurada conta no bucket default, se você especificar um, usando a mesma regra que uma faceta de índice por documento. Um documento raiz sem filho correspondente não contribui para a faceta com escopo embeddedDocument, mas ainda pode contribuir para qualquer outra faceta sem escopo na mesma query.

Importante

Não é possível combinar uma faceta com escopo de embeddedDocumentcom várias outras opções de faceta. Para aprender mais, veja Limitações.

Para um exemplo, consulte o Exemplo de faceta com escopo incorporado.

Importante

As agregações de faceta estão em pré-visualização. O recurso e a documentação correspondente podem mudar a qualquer momento durante o período de pré-visualização. Para aprender mais, consulte Recursos de pré-visualização.

Para calcular métricas para cada bucket de faceta, adicione um documento aggregations a uma definição de faceta. O MongoDB Search calcula as métricas a partir do índice de pesquisa do MongoDB Search, portanto, é muito mais eficiente do que executar um estágio $group posteriormente em seu pipeline.

Para cada bucket de faceta, aggregations permite que você calcule os seguintes valores:

  • soma

  • média

  • minimum

  • maximum

  • primeiro

  • último

Ao usar aggregations, você deve:

  • Índice o campo que você especificar no path para cada métricas como token, number ou date.

  • Inclua explicitamente a métricas count se você quiser a contagem de buckets.

  • Especifique aggregations apenas no nível de folha de facetas aninhadas.

    Se você quiser calcular métricas para um agrupamento intermediário, especifique esse agrupamento como uma faceta de nível superior separada com aggregations e sem faceta aninhada.

O MongoDB Search calcula aggregations sobre os dados no índice do MongoDB Search, que é eventualmente consistente.

Observação

Requisitos de memória

As query de faceta que especificam aggregations ou facetas aninhadas aumentam a memória e o disco que seu índice de pesquisa do MongoDB Search requer além dos requisitos para outras query de faceta. Para aprender mais, consulte Requisitos de memória.

aggregations tem a seguinte sintaxe:

{ "$searchMeta": { "facet": { "facets": { "<facet-name>": { "type": "<facet-type>", "path": "<field-path>", "aggregations": { "<aggregation-name>": { "type": "sum" | "min" | "max" | "avg" | "first" | "last", "path": "<field-path>" } } } } } }}

Cada chave no documento aggregations é um nome de agregação que você especifica. O MongoDB Search retorna cada agregação nos documentos do bucket com o nome que você especificar.

Opção
Tipo
Descrição
Obrigatório?

path

string

Caminho do campo para calcular a métricas. Isso é necessário para todos os tipos de métricas, exceto count, que não aceita path. Todos os outros tipos de métricas calculam um valor a partir de um segundo campo, portanto, você deve nomear esse campo. Por exemplo, para retornar a classificação média dos documento em um bucket, especifique avg com um path de rating. A métricas count conta os documento no bucket, portanto, não precisa de um segundo campo.

condicional

type

string

Tipo de métricas a calcular. O valor pode ser um dos seguintes:

  • count

  • sum

  • avg

  • min

  • max

  • first

  • last

Para aprender mais sobre cada tipo de métricas, consulte Tipos de métricas.

sim

Tipo
Requisitos de campo
Descrição

count

none

Conta os documento no bucket. Não especifique um path para este tipo de métricas. Se você omitir aggregations de uma definição de faceta, o MongoDB Search retornará uma métrica count para o bucket. Se você especificar aggregations, o MongoDB Search retornará uma métrica count apenas se você especificar count no documento aggregations.

sum

Adiciona os valores do campo especificado para os documento no bucket.

avg

Retorna a média dos valores do campo especificado para os documentos no bucket. Se nenhum documento no bucket tiver um valor para o campo, o MongoDB Search retornará null.

min

none

Retorna o valor mais baixo do campo especificado para os documentos no bucket.

max

none

Retorna o valor mais alto do campo especificado para os documentos no bucket.

first

none

Retorna o valor do campo especificado para o primeiro documento no bucket, de acordo com a ordem que a opção de classificação da query define. Se a query não especificar uma classificação, a ordem será arbitrária. Para aprender como especificar uma classificação, consulte Classificar resultados do MongoDB Search.

last

none

Retorna o valor do campo especificado para o último documento no bucket, de acordo com a ordem que a opção de classificação da query define. Se a query não especificar uma classificação, a ordem será arbitrária. Para aprender como especificar uma classificação, consulte Classificar resultados do MongoDB Search.

Importante

min e max suportam todos os tipos de campo, incluindo token. Quando o MongoDB Search calcula essas métricas, ele ignora qualquer documento no qual o campo seja resolvido para um tipo não suportado. O MongoDB Search não retorna um erro quando ignora um documento. Para determinar se o MongoDB Search ignorou documentos em um bucket, adicione uma métrica count ao mesmo documento aggregations e compare-a com o número de documentos que você espera.

Para valores que o MongoDB Search não ignora, min seleciona o menor valor no bucket e max seleciona o maior. Se os valores não forem todos do mesmo tipo, o MongoDB Search aplica a ordem de comparação de tipos BSON para determinar qual valor é o menor ou o maior.

Cada tipo de métricas lida de forma diferente com um campo que é resolvido em mais de um valor, como um array:

  • sum e avg pular o documento.

  • min e max selecionam o menor e o maior valor no array para usar como um elemento representativo para o documento.

  • first e last retornam todos os valores como um array.

Para first e last, o array retornado difere do documento de origem das seguintes maneiras:

  • A ordem dos valores pode diferir. O MongoDB Search lê os valores do índice, que não preserva a ordem do documento de origem. Por exemplo, se um documento contiver ["red", "blue", "green"], o MongoDB Search poderá retornar ["blue", "green", "red"].

  • O MongoDB Search retorna apenas uma instância de um valor duplicado.

  • O MongoDB Search retorna todos os valores no caminho, incluindo valores de um tipo no qual você não pode criar facetas. Por exemplo, se um array contiver strings e um booleano, o MongoDB Search retornará o booleano com as strings.

Para retornar os valores exatamente como o documento de origem os contém, defina storedSource para o campo na definição do seu índice e defina returnStoredSource como true na sua query.

Importante

Faceta aninhada está em Preview. O recurso e a documentação correspondente podem mudar a qualquer momento durante o período de pré-visualização. Para aprender mais, consulte Recursos de pré-visualização.

Para agrupar os documento em cada bucket por campos adicionais, adicione um documento facets a uma definição de faceta existente. Cada definição de faceta aninhada usa a mesma sintaxe que uma definição de faceta de nível superior, portanto, você pode aninhar facetas para criar uma árvore de agrupamentos. O MongoDB Search retorna os buckets para uma faceta aninhada dentro de cada bucket de sua faceta pai.

Para cada bucket de uma faceta que contém uma faceta aninhada, o MongoDB Search também retorna um campo count com o número de documentos no bucket. Você não precisa especificar uma métrica count para esses buckets intermediários.

Você pode aninhar facetas sem limite no número de níveis. No entanto, as seguintes restrições se aplicam:

  • Você pode especificar aggregations apenas em uma faceta folha em uma árvore de facetas aninhadas. Uma definição de faceta que especifica facets não pode especificar aggregations também. Para calcular métricas para um agrupamento intermediário, especifique esse agrupamento como uma faceta de nível superior separada com aggregations e sem faceta aninhada.

  • Você não pode nomear uma faceta aninhada count. O MongoDB Search reserva count para a contagem de documentos de buckets intermediários.

  • O número total de buckets exclusivos que uma query pode retornar não pode exceder 100000. Para calcular os buckets que uma árvore de facetas produz, multiplique o número de buckets em cada nível de seu ramo de aninhamento. O número de buckets em um nível é numBuckets para uma faceta de string ou o número de buckets que boundaries e default definem para uma faceta de número ou data. Por exemplo, uma faceta que solicita 20 buckets e contém uma faceta aninhada que solicita 20 buckets produz 400 buckets exclusivos. Como cada nível multiplica esse total, fazer uma solicitação de mais buckets em cada nível reduz o número de níveis que você pode aninhar.

Para uma query de faceta , o MongoDB Search retorna um mapeamento dos nomes de faceta definidos para uma array de compartimentos para essa faceta nos resultados. O documento de resultado do faceta contém a opção buckets, que é uma array de buckets resultantes para o faceta. Cada documento de bucket de faceta na array tem os seguintes campos:

Opção
Tipo
Descrição

_id

objeto

Identificador único que identifica este bucket de facet. Este valor corresponde ao tipo de dados que está sendo facetado.

count

int

Contagem de documentos nesse bucket de faceta . Para saber mais sobre o campo count, consulte Resultados da pesquisa do MongoDB Search.

Se a definição de faceta especificar Agregações de faceta, cada documento de bucket conterá as métricas que você nomear no documento aggregations em vez do campo count. Se a definição de faceta especificar facetas aninhadas, cada documento de bucket conterá um campo count com o número de documentos no bucket e os resultados da faceta aninhada.

O MongoDB Search permite visualizar e selecionar vários buckets dentro da mesma faceta simultaneamente. Normalmente, selecionar um bucket dentro de uma faceta filtra os resultados da pesquisa de acordo com essa seleção e altera as contagens de todas as facetas.

Exemplo

Suponha que uma definição de índice para a coleção sample_airbnb.listings especifique facetas para os seguintes campos:

  • cancellation_policy

  • room_type

  • accommodates

O faceta cancellation_policy tem os seguintes buckets:

  • flexible

  • moderate

  • strict_14_with_grace_period

  • super_strict_30

  • super_strict_60

Cada bucket tem sua própria contagem de resultados. Quando você pesquisa pelo moderate cancellation_policy, as contagens para os quatro outros buckets Go para 0. Além disso, as contagens de buckets nas facetas room_type e accommodates se reduzem ao número de resultados em cada bucket que também têm um flexible cancellation_policy.

Em cenários em que você precise de um controle mais granular de como os facets afetam as contagens de resultados da pesquisa, habilite o facet de seleção múltipla com a propriedade doesNotAffect em suas queries facetadas. Essas facetas ainda filtram resultados, mas a query não altera suas contagens de resultados.

Você pode especificar doesNotAffect nos seguintes operadores:

Para excluir várias facetas, especifique um array de nomes de facetas. A maioria dos casos de uso exclui apenas a faceta que compartilha um caminho com o filtro. Por exemplo, um filtro equals no campo rating especifica o nome da faceta que usa rating como seu caminho.

Observação

A opção doesNotAffect não funciona com facetas que especificam agregações. Para aprender mais, veja Limitações.

Exemplo

Considere uma query na coleção sample_airbnb.listingsAndReviews para documentos com uma moderate cancellation_policy. Se você especificar um valor doesNotAffect de cancellation_policy, as contagens de buckets na faceta cancellation_policy não mudam, mas as contagens de resultados para os buckets de outras facetas se reduzem ao número de resultados em cada bucket que também têm um moderate cancellation_policy.

Para obter mais informações, consulte o exemplo de faceta de Multi-Select.

Você não pode combinar doesNotAffect com uma faceta de escopo embeddedDocument. Para aprender mais, consulte Faceta em filhos correspondentes de um array de documento incorporado.

Por fim, para casos de uso com muitas facetas, você pode limitar quais outros filtros afetam uma determinada faceta. Você pode fazer isso especificando qualquer faceta na propriedade doesNotAffect de qualquer filtro, inclusive facetas em outros campos. Isso permite que você observe de relance quais seleções restringem as opções mais ou menos rapidamente.

Exemplo

Considere uma query na coleção sample_airbnb.listingsAndReviews para documento com um valor accommodates de 3. Se você especificar um valor doesNotAffect de cancellation_policy, as contagens de resultados para os buckets room_type serão reduzidas ao número de resultados em cada bucket que também acomodam 3 pessoas, mas as contagens de resultados para os buckets em cancellation_policy não serão afetadas.

Para mais informações, consulte o Exemplo de exclusão de filtro inter-faceta.

Quando você executa sua query utilizando o estágio $search, o MongoDB Search armazena os resultados de metadados na variável $$SEARCH_META e retorna somente os resultados da pesquisa. É possível usar a variável $$SEARCH_META em todas as fases do pipeline de agregação compatíveis para visualizar os resultados de metadados da sua query $search. Você também pode usar a variável $$SEARCH_META com faceta.agregações.

O MongoDB recomenda utilizar a variável $$SEARCH_META somente se você precisar dos resultados da pesquisa e dos resultados de metadados. Caso contrário, use o:

  • $search estágio apenas para os resultados da pesquisa.

  • $searchMeta estágio apenas para os resultados dos metadados.

Você pode executar queries de facets somente em um único campo. Não é possível executar queries de atributos em grupos de campos.

As seguintes limitações se aplicam à faceta em filhos correspondentes de um array de documentos incorporados:

  • Você não pode combinar uma opção returnScope de nível superior com uma faceta com escopo embeddedDocumentna mesma query.

  • Uma faceta com escopo embeddedDocumentretorna apenas uma contagem.

  • Não é possível combinar facetas drill-sideways (doesNotAffect) com uma faceta de escopo embeddedDocumentna mesma query.

As seguintes limitações se aplicam às Agregações de Facetas:

  • Você não pode usar as seguintes opções com aggregations:

  • Você não pode usar faceta ou calcular agregação nos seguintes BSON types:

    • binData

    • bool

    • decimal

    • null

    • objectId

    • timestamp

    Para calcular métricas em um desses tipos, use uma view para converter o campo em um tipo compatível antes de índice-o.

Os exemplos a seguir utilizam os dados de amostra. O exemplo de resultados de metadados demonstra como executar uma query de $searchMeta com facet para recuperar somente os metadados nos resultados. O exemplo de metadados e os resultados da pesquisa demonstram como executar uma $search query com facet e a variável de agregação $SEARCH_META para recuperar os resultados de pesquisa e dos metadados. O exemplo returnScope demonstra como criar facetas em campos aninhados em um array de objetos indexados dinamicamente usando o tipo embeddedDocuments. O exemplo de faceta com escopo incorporado demonstra como criar facetas apenas nos filhos correspondentes de um array embeddedDocuments. Os exemplos de seleção múltipla e exclusão de filtro entre facetas demonstram como usar doesNotAffect para controlar como as facetas afetam as contagens umas das outras. O exemplo de agregação demonstra como calcular métricas para cada bucket de faceta, e o exemplo de faceta aninhada demonstra como agrupar resultados por um segundo campo e calcular métricas para cada bucket.

Para saber mais, consulte How to Use Facets with MongoDB Search.

Você pode aprender mais sobre facet (Operador de Pesquisa do MongoDB) na Pesquisa do MongoDB com nosso curso e vídeo.

Para saber mais sobre o uso de facets no MongoDB Search, faça a Unidade 9 do Curso de Introdução ao MongoDB na MongoDB University. A unidade de hora do 1.5 inclui uma visão geral do MongoDB Search e lições sobre como criar índices do MongoDB Search, executar consultas do$search utilizando operadores compostos e agrupar resultados utilizando o facet.

Assista a este vídeo para saber como criar e usar um numérico e string facet (MongoDB Search operador) em sua query para agrupar resultados e recuperar uma contagem dos resultados nos grupos.

Duração: 11 Minutos

Avalie esta página