Definição
facetO coletor
facetagrupa resultados por valores ou intervalos nos campos facetados especificados e retorna a contagem para cada um desses grupos.You can use
facetwith both the$searchand$searchMetastages. MongoDB recommends usingfacetwith the$searchMetastage to retrieve metadata results only for the query. To retrieve metadata results and query results using the$searchstage, you must use the$$SEARCH_METAaggregation variable. SeeSEARCH_METAAggregation Variable to learn more.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:
Nested fields inside an array of objects, see returnScope Example.
Matching children of an
embeddedDocumentsarray usingembeddedDocument, see Embedded-Scoped Facet Example.Tipo de campo
embeddedDocumentsda raiz, consulte Query de faceta.
Sintaxe
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 } }
Campos
Campo | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| documento | sim | Information for bucketing the data for each facet. You must specify at least one Facet Definition. Each facet definition can also specify Facet Aggregations to compute metrics for each bucket. |
| documento | no | Operador para usar para executar a faceta . Se omitido, o MongoDB Search executa a faceta sobre todos os documentos na coleção. |
Requisitos de memória
Facet queries are memory-intensive, regardless of your cluster tier. Queries that specify Facet Aggregations or nested facets require more memory and disk than other facet queries. Before you use facets in production, confirm that your cluster has enough memory for your workload. To learn more, see Search Memory Management. To get sizing guidance for your workload, request support.
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.
For nested facets, the total unique values computed in a query multiply based on the unique values across each level of nesting. Even when each individual field has low cardinality, the combination of values across nested paths can produce a large number of unique buckets. To learn more about how nested facets multiply buckets, see Nested Facets.
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.
Definição de Facet
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:
Facets de String
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.
Sintaxe
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ções
Opção | Tipo | Descrição | Obrigatório? |
|---|---|---|---|
| objeto | Scopes the facet's bucket counts to only the child documents of an | no |
| int | Número máximo de categorias de facetas para retornar nos resultados. O valor deve ser menor ou igual a | no |
| string | Caminho do campo para a faceta. Você pode especificar um campo que é indexado como um token. | sim |
| string | Tipo de facet. O valor deve ser | sim |
Exemplo
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.
1 db.movies.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "range": { 7 "path": "year", 8 "gte": 2000, 9 "lte": 2015 10 } 11 }, 12 "facets": { 13 "genresFacet": { 14 "type": "string", 15 "path": "genres" 16 } 17 } 18 } 19 } 20 } 21 ])
Para saber mais sobre esses resultados, consulte Resultados de faceta.
Facets Numéricos
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.
Sintaxe
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ções
Opção | Tipo | Descrição | Obrigatório? |
|---|---|---|---|
| array de números | List of numeric values in ascending order that specify the boundaries for your buckets. You must specify between two and ten thousand (
| sim |
| 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 |
| objeto | Scopes the facet's bucket counts to only the child documents of an | no |
| string | Caminho do campo para a faceta. Você pode especificar um campo que é indexado como o tipo número. | sim |
| string | Tipo de facet. O valor deve ser | sim |
Exemplo
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 bucket1990, limite superior exclusivo para o bucket1980e limite inferior inclusivo para este bucket2000, limite superior exclusivo para o bucket1990
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.
1 db.movies.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "range": { 7 "path": "year", 8 "gte": 1980, 9 "lte": 2000 10 } 11 }, 12 "facets": { 13 "yearFacet": { 14 "type": "number", 15 "path": "year", 16 "boundaries": [1980,1990,2000], 17 "default": "other" 18 } 19 } 20 } 21 } 22 } 23 ])
Para saber mais sobre esses resultados, consulte Resultados de faceta.
Facetas de data
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.
Sintaxe
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ções
Opção | Tipo | Descrição | Obrigatório? |
|---|---|---|---|
| array de números | Lista de valores de data que especificam os limites para cada bucket. Você deve especificar:
Cada par adjacente de valores atua como o limite inferior inclusivo e o limite superior exclusivo para o bucket. | sim |
| 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 |
| objeto | Scopes the facet's bucket counts to only the child documents of an | no |
| string | Caminho do campo para a faceta. Você pode especificar um campo que é indexado como um tipo de data. | sim |
| string | Tipo de facet. O valor deve ser | sim |
Exemplo
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 bucket2005-01-01, limite superior exclusivo para o bucket2000-01-01e limite inferior inclusivo para este bucket2010-01-01, limite superior exclusivo para o bucket2005-01-01e limite inferior inclusivo para este bucket2015-01-01, limite superior exclusivo para o bucket2010-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.
1 db.movies.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "range": { 7 "path": "released", 8 "gte": ISODate("2000-01-01T00:00:00.000Z"), 9 "lte": ISODate("2015-01-31T00:00:00.000Z") 10 } 11 }, 12 "facets": { 13 "yearFacet": { 14 "type": "date", 15 "path": "released", 16 "boundaries": [ISODate("2000-01-01"), ISODate("2005-01-01"), ISODate("2010-01-01"), ISODate("2015-01-01")], 17 "default": "other" 18 } 19 } 20 } 21 } 22 } 23 ])
Para saber mais sobre esses resultados, consulte Resultados de faceta.
Comparação de tipos de campo para 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) | Normalizer Support: The | |
Numérico | numberFacet (desatualizado) | Array Support: The | |
Data | dateFacet (desatualizado) | Suporte a array: o tipo |
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 .
Faceta em filhos correspondentes de um array de documento incorporado
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? |
|---|---|---|---|
| string | Campo com índice do tipo | sim |
| objeto | Operador para executar em cada documento filho no array | sim |
For a number or date facet, a matching child whose value falls outside the configured boundaries counts in the default bucket, if you specify one, using the same rule as a document-indexed facet. A root document with no matching child doesn't contribute to the embeddedDocument-scoped facet, but can still contribute to any other, unscoped facet in the same query.
Importante
You can't combine an embeddedDocument-scoped facet with several other faceting options. To learn more, see Limitations.
For an example, see the Embedded-Scoped Facet Example.
Agregações de faceta
Importante
Facet aggregations is in Preview. The feature and corresponding documentation might change at any time during the Preview period. To learn more, see Preview Features.
To compute metrics for each facet bucket, add an aggregations document to a facet definition. MongoDB Search computes the metrics from the MongoDB Search index, so it is much more efficient than running a $group stage later in your 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
pathpara cada métricas comotoken,numberoudate.Inclua explicitamente a métricas
countse você quiser a contagem de buckets.Especifique
aggregationsapenas 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
aggregationse 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
Facet queries that specify aggregations or nested facets increase the memory and disk that your MongoDB Search index requires beyond the requirements for other facet queries. To learn more, see Memory Requirements.
Sintaxe
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ções
Opção | Tipo | Descrição | Obrigatório? |
|---|---|---|---|
| string | Caminho do campo para calcular a métricas. Isso é necessário para todos os tipos de métricas, exceto | condicional |
| string | Tipo de métricas a calcular. O valor pode ser um dos seguintes:
To learn more about each metric type, see Metric Types. | sim |
Tipos de métricas
Tipo | Requisitos de campo | Descrição |
|---|---|---|
| none | Conta os documento no bucket. Não especifique um |
| Adiciona os valores do campo especificado para os documento no bucket. | |
| 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á | |
| none | Retorna o valor mais baixo do campo especificado para os documentos no bucket. |
| none | Retorna o valor mais alto do campo especificado para os documentos no bucket. |
| 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. |
| 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.
For values that MongoDB Search doesn't skip, min selects the smallest value in the bucket and max selects the largest. If the values aren't all of the same type, MongoDB Search applies BSON type comparison order to determine which value is smallest or largest.
Considerações sobre arrays
Cada tipo de métricas lida de forma diferente com um campo que é resolvido em mais de um valor, como um array:
sumeavgpular o documento.minemaxselecionam o menor e o maior valor no array para usar como um elemento representativo para o documento.firstelastretornam 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.
Facetas aninhadas
Importante
Nested facets is in Preview. The feature and corresponding documentation might change at any time during the Preview period. To learn more, see Preview Features.
To group the documents in each bucket by additional fields, add a facets document to an existing facet definition. Each nested facet definition uses the same syntax as a top-level facet definition, so you can nest facets to build a tree of groupings. MongoDB Search returns the buckets for a nested facet inside each bucket of its parent facet.
For each bucket of a facet that contains a nested facet, MongoDB Search also returns a count field with the number of documents in the bucket. You don't need to specify a count metric for these intermediate buckets.
You can nest facets without limit on the number of levels. However, the following restrictions apply:
Você pode especificar
aggregationsapenas em uma faceta folha em uma árvore de facetas aninhadas. Uma definição de faceta que especificafacetsnão pode especificaraggregationstambém. Para calcular métricas para um agrupamento intermediário, especifique esse agrupamento como uma faceta de nível superior separada comaggregationse sem faceta aninhada.You can't name a nested facet
count. MongoDB Search reservescountfor the document count of intermediate buckets.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 énumBucketspara uma faceta de string ou o número de buckets queboundariesedefaultdefinem para uma faceta de número ou data. Por exemplo, uma faceta que solicita20buckets e contém uma faceta aninhada que solicita20buckets produz400buckets 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.
Resultados de facet
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 |
|---|---|---|
| objeto | Identificador único que identifica este bucket de facet. Este valor corresponde ao tipo de dados que está sendo facetado. |
| int | Contagem de documentos nesse bucket de faceta . Para saber mais sobre o campo |
If the facet definition specifies Facet Aggregations, each bucket document contains the metrics that you name in the aggregations document instead of the count field. If the facet definition specifies nested facets, each bucket document contains a count field with the number of documents in the bucket, and the results for the nested facet.
Facetas de seleção múltipla
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_policyroom_typeaccommodates
O faceta cancellation_policy tem os seguintes buckets:
flexiblemoderatestrict_14_with_grace_periodsuper_strict_30super_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
The doesNotAffect option doesn't work with facets that specify aggregations. To learn more, see Limitations.
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.
You can't combine doesNotAffect with an embeddedDocument-scoped facet. To learn more, see Facet on Matching Children of an Embedded Documents Array.
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.
SEARCH_META Variável de agregação
When you run your query using the $search stage, MongoDB Search stores the metadata results in the $$SEARCH_META variable and returns only the search results. You can use the $$SEARCH_META variable in all the supported aggregation pipeline stages to view the metadata results for your $search query. You can also use the $$SEARCH_META variable with facet.aggregations.
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:
$searchestágio apenas para os resultados da pesquisa.$searchMetaestágio apenas para os resultados dos metadados.
Limitações
Você pode executar queries de facets somente em um único campo. Não é possível executar queries de atributos em grupos de campos.
Limitações para facetas de escopo incorporado
The following limitations apply to Facet on Matching Children of an Embedded Documents Array:
Você não pode combinar uma opção
returnScopede nível superior com uma faceta com escopoembeddedDocumentna mesma query.Uma faceta com escopo
embeddedDocumentretorna apenas uma contagem.Não é possível combinar facetas drill-sideways (
doesNotAffect) com uma faceta de escopoembeddedDocumentna mesma query.
Limitações para agregações de faceta
The following limitations apply to Facet Aggregations:
Você não pode usar as seguintes opções com
aggregations:doesNotAffectfor Multi-Select Facets
You can't facet or compute aggregations on the following BSON types:
binDatabooldecimalnullobjectIdtimestamp
To compute metrics over one of these types, use a view to convert the field to a supported type before you index it.
Exemplos
The following examples use the sample data. The metadata results example demonstrates how to run a $searchMeta query with facet to retrieve only the metadata in the results. The metadata and search results example demonstrates how to run a $search query with facet and the $SEARCH_META aggregation variable to retrieve both the search and metadata results. The returnScope example demonstrates how to facet on nested fields in an array of objects dynamically indexed using the embeddedDocuments type. The embedded-scoped facet example demonstrates how to facet on only the matching children of an embeddedDocuments array. The multi-select and inter-facet filter exclusion examples demonstrate how to use doesNotAffect to control how facets affect each other's counts. The aggregation example demonstrates how to compute metrics for each facet bucket, and the nested facet example demonstrates how to group results by a second field and compute metrics for each bucket.
Continuar aprendendo
Para saber mais, consulte How to Use Facets with MongoDB Search.
You can learn more about facet (MongoDB Search Operator) in MongoDB Search with our course and video.
Aprenda com cursos
To learn more about using facets in MongoDB Search, take Unit 9 of the Intro To MongoDB Course on MongoDB University. The 1.5 hour unit includes an overview of MongoDB Search and lessons on creating MongoDB Search indexes, running $search queries using compound operators, and grouping results using facet.
Aprenda assistindo
Watch this video to learn about how you can create and use a numeric and string facet (MongoDB Search Operator) in your query to group results and retrieve a count of the results in the groups.
Duração: 11 Minutos