Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

facet (MongoDB Search Operador)

facet

El facet colector agrupa los resultados por valores o rangos en los campos facetados específicos y devuelve el conteo para cada uno de esos grupos.

Puede utilizar facet con las etapas $search y $searchMeta. MongoDB recomienda usar facet con la etapa $searchMeta para recuperar resultados de metadatos solo para la query. Para recuperar resultados de metadatos y resultados de query utilizando la etapa $search, debe utilizar la variable de agregación $$SEARCH_META. Consulte la SEARCH_META Variable de agregación para obtener más información.

Si defines storedSource en tu definición del tipo de campo embeddedDocuments, puedes usar returnScope junto con returnStoredSource para filtrar en campos anidados dentro de un arreglo de objetos. De lo contrario, solo puede crear facetas en el campo de tipo raíz embeddedDocuments. Para un ejemplo de faceteado activado:

facet tiene la siguiente sintaxis:

{
"$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
¿Requerido?
Descripción

facets

Documento

Sí

Información para agrupar los datos de cada faceta. Se debe especificar al menos una Definición de faceta. Cada definición de faceta también puede especificar agregaciones de facetas para calcular métricas para cada segmento.

operator

Documento

no

El operador que se debe usar para realizar la faceta. Si se omite, MongoDB Search realiza el facetado sobre todos los documentos de la colección.

Las query de facetas son intensivas en memoria, independientemente de su nivel de clúster. Las query que especifican agregación de faceta o facetas anidadas requieren más memoria y disco que otras query de faceta. Antes de usar facetas en producción, confirme que su clúster tiene suficiente memoria para su carga de trabajo. Para obtener más información, consulte Gestión de la memoria de búsqueda. Para obtener orientación sobre el tamaño de su carga de trabajo, solicitud asistencia.

La memoria que requiere una query de faceta depende del número de valores únicos en el campo sobre el que se aplica la faceta, no del número de cubos que solicita mediante numBuckets o boundaries. Por ejemplo, una faceta que solicita 20 depósitos en un campo con cinco millones de valores únicos sigue contando cada valor único para determinar los 20 depósitos principales.

Para facetas anidadas, los valores únicos totales calculados en una query se multiplican en función de los valores únicos de cada nivel de anidamiento. Incluso cuando cada campo individual tiene una cardinalidad baja, la combinación de valores en rutas anidadas puede generar un gran número de cubos únicos. Para obtener más información sobre cómo las facetas anidadas multiplican los depósitos, consulte Facetas anidadas.

MongoDB Search rastrea los recuentos de cubos por separado para cada query, por lo que el uso total de memoria escala con el número de query de faceta simultáneos. En un clúster, MongoDB Search también requiere memoria para fusionar los depósitos de cada partición, que escalar con el número de particiones y el número de depósitos.

El documento de definición de la faceta contiene el nombre de la faceta y las opciones específicas de un tipo de faceta. MongoDB Search admite los siguientes tipos de facetas:

Importante

stringFacet ahora está desfasado. Usa token en su lugar, lo que proporciona mejores facetas.

Para obtener más información sobre las diferencias entre los tipos de campo actualizados y obsoletos para faceta, consulte Comparar Tipos de Campo para Faceta.

Las facetas de string permiten acotar los resultados de MongoDB Search en función de los valores de string más frecuentes del campo de string especificado. El campo de string debe estar índice como token. Para aplicar facetas a los campos string en los documentos incrustados, también debes crear un índice de los campos principales como el tipo de documento. Cuando se aplican facetas a strings en arreglos o documentos incrustados, MongoDB Search devuelve recuentos de facetas basados en el número de documentos raíz coincidentes.

Las facetas de String tienen la siguiente sintaxis:

{
"$searchMeta": {
"facet":{
"operator": {
<operator-specification>
},
"facets": {
"<facet-name>" : {
"type" : "string",
"path" : "<field-path>",
"numBuckets" : <number-of-categories>,
"embeddedDocument": { <embedded-document-scope> } // optional
}
}
}
}
}
Opción
Tipo
Descripción
¿Requerido?

embeddedDocument

Objeto

Limita los recuentos de cubos de la faceta solo a los documentos secundarios de un arreglo embeddedDocuments que coinciden con un predicado de query. Para obtener más información, consulte Faceta en la coincidencia de elementos secundarios de un arreglo de documentos incrustados.

no

numBuckets

Int

Número máximo de categorías de faceta que se devolverán en los resultados. El valor debe ser menor o igual a 10000. Si se especifica, MongoDB Search puede devolver menos categorías de las solicitadas si los datos se agrupan en menos categorías que el número solicitado. Si se omite, el valor por defecto es 10, lo que significa que MongoDB Search devuelve solo las 10 categorías de faceta principales por recuento.

no

path

string

Ruta de campo para expresar facetas. Puede especificar un campo que tenga un índice como un token.

Sí

type

string

Tipo de faceta. El valor debe ser string.

Sí

Ejemplo

El siguiente ejemplo utiliza un índice llamado default en la colección sample_mflix.movies. El campo genres en la colección está indexado como el tipo token y el campo year está indexado como el tipo número.

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

La etapa utiliza la $searchMeta para buscar year en el campo en la movies colección películas desde 2000 hasta 2015 y recuperar un recuento del número de películas en cada género.

1db.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 obtener más información sobre estos resultados, consulte Resultados de facetas.

Importante

numberFacet ahora está desactualizado. Usa number en su lugar, que proporciona una mejor facetación.

Para obtener más información sobre las diferencias entre los tipos de campo actualizados y obsoletos para faceta, consulte Comparar Tipos de Campo para Faceta.

Las facetas numéricas permiten determinar la frecuencia de los valores numéricos en los resultados de búsqueda dividiendo los resultados en rangos separados de números. Cuando aplicas facetas a números en arreglos o documentos incrustados, MongoDB Search devuelve recuentos de facetas en función de la cantidad de documentos raíz coincidentes.

Los facetas numéricas tienen la siguiente sintaxis:

{
"$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
}
}
}
}
}
Opción
Tipo
Descripción
¿Requerido?

boundaries

arreglo de números

Lista de valores numéricos en orden ascendente que especifican los límites para sus depósitos. Debe especificar entre dos y diez mil valores de límite ([2, 10000]). Cada par adyacente de valores define un contenedor con un límite inferior inclusivo y un límite superior exclusivo. Puede especificar cualquier combinación de valores de los siguientes BSON types:

  • entero de 32 bits (int32)

  • entero de 64 bits (int64)

  • punto flotante binario de 64 bits (double)

Sí

default

string

Nombre de un bucket adicional que cuenta los documentos devueltos por el operador que no se encuentran dentro de los límites especificados. Si se omite, MongoDB Search también incluye los resultados del operador de faceta que no caen en un segmento especificado, pero no los incluye en ningún recuento de segmentos.

no

embeddedDocument

Objeto

Limita los recuentos de cubos de la faceta solo a los documentos secundarios de un arreglo embeddedDocuments que coinciden con un predicado de query. Para obtener más información, consulte Faceta en la coincidencia de elementos secundarios de un arreglo de documentos incrustados.

no

path

string

ruta de campo para facetar. Puedes especificar un campo que se indexe como tipo de número.

Sí

type

string

Tipo de faceta. El valor debe ser number.

Sí

Ejemplo

El ejemplo siguiente utiliza un índice llamado default en la colección sample_mflix.movies. El campo year en la colección está indexado como el tipo número.

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

La query utiliza la etapa $searchMeta para buscar en el campo year de la colección movies películas entre los años 1980 y 2000 y recuperar resultados de metadatos para la query. La query especifica tres buckets:

  • 1980_, límite inferior inclusivo para este cubo__

  • 1990el límite superior exclusivo para el depósito 1980 y el límite inferior inclusivo para este depósito

  • 2000límite superior exclusivo para el grupo 1990

La query también especifica un default bucket llamado other para recuperar los resultados de la query que no se encuentren dentro de ninguno de los límites especificados.

1db.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 obtener más información sobre estos resultados, consulte Resultados de facetas.

Importante

dateFacet está ahora obsoleto. Utiliza date en su lugar, lo que proporciona una mejor faceta.

Para obtener más información sobre las diferencias entre los tipos de campo actualizados y obsoletos para faceta, consulte Comparar Tipos de Campo para Faceta.

Las facetas de fecha te permiten limitar los resultados de búsqueda según una fecha. Cuando aplicas facetas por fechas en arreglos o documentos incrustados, MongoDB Search devuelve los recuentos de facetas según el número de documentos raíz coincidentes.

Los facetas de fecha tienen la siguiente sintaxis:

{
"$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
}
}
}
}
}
Opción
Tipo
Descripción
¿Requerido?

boundaries

arreglo de números

Lista de valores de fecha que especifican los límites de cada franja. Debe especificar:

  • Al menos dos límites, que son menores o iguales a diez mil ([2, 10000])

  • Valores en orden ascendente, con la fecha más antigua primero

Cada par adyacente de valores actúa como el límite inferior inclusivo y el límite superior exclusivo para el contenedor.

Sí

default

string

Nombre de un bucket adicional que cuenta los documentos devueltos por el operador que no están dentro de los límites especificados. Si se omite, MongoDB Search también incluye los resultados del operador de faceta que no entran dentro de un bucket especificado, pero MongoDB Search no incluye estos resultados en ningún conteo de bucket.

no

embeddedDocument

Objeto

Limita los recuentos de cubos de la faceta solo a los documentos secundarios de un arreglo embeddedDocuments que coinciden con un predicado de query. Para obtener más información, consulte Faceta en la coincidencia de elementos secundarios de un arreglo de documentos incrustados.

no

path

string

Ruta de campo para facetar. Se puede especificar un campo que se indexa como tipo fecha.

Sí

type

string

Tipo de faceta. El valor debe ser date.

Sí

Ejemplo

El ejemplo siguiente utiliza un índice llamado default en la colección sample_mflix.movies. El campo released en la colección se indexa como el tipo fecha.

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

La query utiliza la etapa $searchMeta para buscar en el campo released de la colección movies películas entre los años 2000 y 2015 y recuperar resultados de metadatos para la query. La query especifica cuatro buckets:

  • 2000-01-01_, límite inferior inclusivo para este cubo__

  • 2005-01-01el límite superior exclusivo para el depósito 2000-01-01 y el límite inferior inclusivo para este depósito

  • 2010-01-01el límite superior exclusivo para el depósito 2005-01-01 y el límite inferior inclusivo para este depósito

  • 2015-01-01límite superior exclusivo para el grupo 2010-01-01

La query también especifica un default bucket llamado other para recuperar los resultados de la query que no se encuentren dentro de ninguno de los límites especificados.

1db.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 obtener más información sobre estos resultados, consulte Resultados de facetas.

Los tipos de campo de MongoDB Search actualizados proporcionan una funcionalidad mejorada para soporte facetas en comparación con los tipos obsoletos (stringFacet, numberFacet, dateFacet). La siguiente tabla destaca las diferencias clave en la funcionalidad:

Categoría de faceta
Tipo de campo actualizado
Tipo de faceta anticuado
Diferencias clave

String

stringFacet (desactualizado)

Normalizer Support: The token type supports normalizers that transform facet buckets. For example, with normalizer: lowercase, "ADIDAS" and "adidas" count toward the same bucket while stringFacet treats them as separate buckets.

Numeric

numberFacet (desactualizado)

Array Support: The number type considers values within arrays for facet buckets. For example, a document with an array value [0, 10] counts toward both buckets [1, 5] and [6, 10] while numberFacet ignores array values completely.

fecha

dateFacet (desactualizado)

Soporte de arreglos: El tipo date considera los valores dentro de arreglos para los segmentos de facetas. Por ejemplo, un valor de arreglo con fechas puede contribuir a múltiples rangos de fechas, mientras que dateFacet ignora completamente los valores de arreglo.

Nota

Cuando tanto los tipos de campo obsoletos como los actualizados se definen para el mismo campo, los tipos de faceta obsoletos tienen prioridad. Por ejemplo, si token y stringFacet están definidos para un campo, el cálculo de facetas utiliza la asignación stringFacet.

Cada definición de faceta puede incluir un campo embeddedDocument opcional que limita los recuentos de depósitos de la faceta solo a los documentos secundarios en un arreglo de embeddedDocuments que coinciden con un predicado de query. Si omite el campo embeddedDocument, la faceta está indexada por documento.

Sin embeddedDocument, un documento raíz se cuenta en un bucket si tiene algún documento secundario que caiga en ese bucket, incluso si ese secundario no coincide con la query definida en el bloque facet.operator. El campo embeddedDocument restringe las contribuciones de los depósitos solo a los elementos secundarios que coinciden con el embeddedDocument.operator especificado. Cuenta cada documento raíz como máximo una vez por bucket.

El campo embeddedDocument toma los siguientes campos:

Campo
Tipo
Descripción
¿Requerido?

path

string

Campo de tipo embeddedDocuments índice para acotar la faceta a. El path de la faceta debe ser un descendiente de este campo.

Sí

operator

Objeto

operador para ejecutar contra cada documento secundario en el arreglo embeddedDocuments que especifique en path. Solo los documentos secundarios que coinciden con este operador contribuyen a los recuentos de depósitos de la faceta. Cada ruta a la que se hace referencia en este operador debe ser un descendiente de path.

Sí

Para una faceta de número o fecha, un elemento secundario coincidente cuyo valor quede fuera de los recuentos configurados de boundaries en el depósito default, si especifica uno, utilizando la misma regla que una faceta de índice de documento. Un documento raíz sin un hijo coincidente no contribuye a la faceta con ámbito embeddedDocument, pero aún puede contribuir a cualquier otra faceta sin ámbito en la misma query.

Importante

No se puede combinar una faceta de ámbito embeddedDocumentcon varias otras opciones de faceta. Para aprender más, se puede consultar Limitaciones.

Para ver un ejemplo, consulte el Ejemplo de faceta de ámbito incrustado.

Importante

Agregaciones de faceta están en vista previa. La funcionalidad y la documentación correspondiente pueden cambiar en cualquier momento durante el período de vista previa. Para aprender más, consultar Funcionalidades de la vista previa.

Para calcular métricas para cada grupo de facetas, añada un documento aggregations a una definición de faceta. MongoDB Search calcula las métricas del índice de búsqueda de MongoDB Search, por lo que es mucho más eficiente que ejecutar una $group etapa más adelante en su pipeline.

Para cada bucket de faceta, aggregations le permite calcular los siguientes valores:

  • suma

  • average

  • Mínimo

  • máximo

  • primero

  • último

Al utilizar aggregations, debe:

  • Índice el campo que especifique en el path para cada métricas como token, number o date.

  • Incluya explícitamente la métrica count si desea el recuento de depósitos.

  • Solo especifique aggregations en el nivel hoja de facetas anidadas.

    Si desea calcular métricas para una agrupación intermedia, especifique esa agrupación como una faceta de nivel superior independiente con aggregations y sin facetas anidadas.

MongoDB Search calcula aggregations sobre los datos en el índice de búsqueda de MongoDB, que es finalmente coherente.

Nota

Requisitos de memoria

Las query de faceta que especifican aggregations o facetas anidadas aumentan la memoria y el disco que requiere su índice de MongoDB Search más allá de los requisitos para otras query de faceta. Para aprender más, consulte Requisitos de memoria.

aggregations tiene la siguiente sintaxis:

{
"$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 clave en el documento aggregations es un nombre de agregación que usted especifica. MongoDB Search devuelve cada agregación en los documentos de bucket con el nombre que especifique.

Opción
Tipo
Descripción
¿Requerido?

path

string

Ruta de campo sobre la que calcular la métrica. Esto es necesario para todos los tipos de métricas, excepto count, que no acepta un path. Cada otro tipo de métrica calcula un valor de un segundo campo, por lo que debe nombrar ese campo. Por ejemplo, para devolver la calificación promedio de los documentos en un bucket, especifique avg con un path de rating. La métrica count cuenta los documentos en el depósito, por lo que no necesita un segundo campo.

Condicional

type

string

Tipo de métrica a calcular. El valor puede ser uno de los siguientes:

  • count

  • sum

  • avg

  • min

  • max

  • first

  • last

Para aprender más sobre cada tipo de métrica, consulte Tipos de métricas.

Sí

Tipo
Requisitos de campo
Descripción

count

Ninguno

Cuenta los documentos en el bucket. No especifique un path para este tipo de métrica. Si omite aggregations de una definición de faceta, MongoDB Search devuelve una métrica count para el bucket. Si especifica aggregations, MongoDB Search devuelve una métrica count solo si especifica count en el documento aggregations.

sum

Suma los valores del campo especificado para los documentos en el depósito.

avg

Devuelve el promedio de los valores del campo especificado para los documentos en el bucket. Si ningún documento en el bucket tiene un valor para el campo, MongoDB Search devuelve null.

min

Ninguno

Devuelve el valor más bajo del campo especificado para los documentos del bucket.

max

Ninguno

Devuelve el valor más alto del campo especificado para los documentos en el segmento.

first

Ninguno

Devuelve el valor del campo especificado para el primer documento del bucket, según el orden que define la opción de ordenación de la query. Si la query no especifica una ordenación, el orden es arbitrario. Para aprender cómo especificar una ordenación, consulte Ordenar resultados de MongoDB Search.

last

Ninguno

Devuelve el valor del campo especificado para el último documento del bucket, según el orden que define la opción de ordenación de la query. Si la query no especifica una ordenación, el orden es arbitrario. Para aprender cómo especificar una ordenación, consulte Ordenar resultados de MongoDB Search.

Importante

min y max admiten todos los tipos de campo, incluido token. Cuando MongoDB Search calcula estas métricas, omite cualquier documento en el que el campo se resuelve en un tipo no compatible. MongoDB Search no devuelve un error cuando omite un documento. Para determinar si MongoDB Search omitió documentos en un bucket, agregue una métrica count al mismo documento aggregations y compárela con el número de documentos que espera.

Para los valores que MongoDB Search no omite, min selecciona el valor más pequeño del bucket y max selecciona el más grande. Si los valores no son todos del mismo tipo, MongoDB Search aplica orden de comparación de tipos BSON para determinar qué valor es el más pequeño o el más grande.

Cada tipo de métrica gestiona un campo que se resuelve en más de un valor, como un arreglo, de forma diferente:

  • sum y avg omitir el documento.

  • min y max selecciona el valor más bajo y el más alto en el arreglo para usarlo como elemento representativo para el documento.

  • first y last devuelve todos los valores como un arreglo.

Para first y last, el arreglo devuelto difiere del documento de origen de las siguientes maneras:

  • El orden de los valores podría diferir. MongoDB Search lee los valores del índice, lo que no conserva el orden del documento de origen. Por ejemplo, si un documento contiene ["red", "blue", "green"], MongoDB Search podría devolver ["blue", "green", "red"].

  • MongoDB Search devuelve solo una instancia de un valor duplicado.

  • MongoDB Search devuelve cada valor en la ruta, incluidos los valores de un tipo en el que no se puede aplicar una faceta. Por ejemplo, si un arreglo contiene tanto cadenas como un booleano, MongoDB Search devuelve el booleano con las cadenas.

Para devolver los valores exactamente como los contiene el documento de origen, defina storedSource para el campo en la definición de su índice y establezca returnStoredSource en true en su query.

Importante

Las facetas anidadas están en vista previa. La funcionalidad y la documentación correspondiente pueden cambiar en cualquier momento durante el período de vista previa. Para aprender más, consultar Funcionalidades de la vista previa.

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:

  • Puede especificar aggregations solo en una faceta hoja en un árbol de facetas anidadas. Una definición de faceta que especifica facets no puede especificar también aggregations. Para calcular métricas para una agrupación intermedia, especifique esa agrupación como una faceta de nivel superior independiente con aggregations y sin faceta anidada.

  • You can't name a nested facet count. MongoDB Search reserves count for the document count of intermediate buckets.

  • El número total de depósitos únicos que una query puede devolver no puede superar 100000. Para calcular los cubos que produce un árbol de facetas, multiplique el número de cubos en cada nivel de su rama de anidamiento. El número de depósitos en un nivel es numBuckets para una faceta de string o el número de depósitos que boundaries y default definen para una faceta de número o fecha. Por ejemplo, una faceta que solicita 20 cubos y contiene una faceta anidada que solicita 20 cubos produce 400 cubos únicos. Dado que cada nivel multiplica este total, la solicitud de más depósitos en cada nivel reduce el número de niveles que se pueden anidar.

Para una consulta de faceta, MongoDB Search devuelve una asignación de los nombres de facetas definidos a un arreglo de buckets para esa faceta en los resultados. El documento de resultados de la faceta contiene la opción buckets, que es un arreglo de cubos resultantes para la faceta. Cada documento de agrupación por facetas en el arreglo tiene los siguientes campos:

Opción
Tipo
Descripción

_id

Objeto

Identificador único que identifica este bucket de facetas. Este valor coincide con el tipo de faceta en la que se está aplicando.

count

Int

Cantidad de documentos en este bucket de facetas. Para obtener más información sobre el campo count, consulta Recuento de resultados de MongoDB Search.

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.

MongoDB Search te permite ver y seleccionar múltiples "buckets" dentro de la misma faceta simultáneamente. Normalmente, seleccionar un bucket dentro de una faceta filtra los resultados de la búsqueda según esa selección y modifica los recuentos para todas las facetas.

Ejemplo

Suponga que una definición de índice para la colección sample_airbnb.listings especifica facetas para los siguientes campos:

  • cancellation_policy

  • room_type

  • accommodates

La faceta cancellation_policy tiene los siguientes cubos:

  • flexible

  • moderate

  • strict_14_with_grace_period

  • super_strict_30

  • super_strict_60

Cada cubo tiene su propio recuento de resultados. Cuando busca el moderate cancellation_policy, los recuentos de los otros cuatro depósitos Go a 0. Además, los recuentos de los depósitos en las facetas room_type y accommodates se reducen al número de resultados de cada depósito que también tienen un flexible cancellation_policy.

En escenarios en los que necesita un control más granular sobre cómo los facetas afectan el conteo de resultados de búsqueda, active el faceting de selección múltiple con la propiedad doesNotAffect en sus consultas facetadas. Estas facetas siguen filtrando los resultados, pero la query no altera sus recuentos de resultados.

Puede especificar doesNotAffect en los siguientes operadores:

Para excluir varias facetas, especifique un arreglo de nombres de faceta. La mayoría de los casos de uso excluyen únicamente la faceta que comparte una ruta con el filtro. Por ejemplo, un filtro equals en el campo rating especifica el nombre de la faceta que utiliza rating como su ruta.

Nota

La opción doesNotAffect no funciona con facetas que especifican agregación. Para aprender más, se puede consultar Limitaciones.

Ejemplo

Considere una query en la colección sample_airbnb.listingsAndReviews para documentos con un moderate cancellation_policy. Si especifica un valor doesNotAffect de cancellation_policy, el recuento de depósitos en la faceta cancellation_policy no cambia, pero el recuento de resultados de los depósitos de otras facetas se reduce al número de resultados de cada depósito que también tienen un moderate cancellation_policy.

Para obtener más información, consulta el ejemplo de Selección múltiple por facetas.

No puede combinar doesNotAffect con una faceta con ámbito de embeddedDocument. Para aprender más, consulte Faceta en la coincidencia de elementos secundarios de un arreglo de documentos incrustados.

Por último, para casos de uso con muchas facetas, puede limitar qué otros filtros afectan a una faceta determinada. Puede hacerlo especificando cualquier faceta en la propiedad doesNotAffect de cualquier filtro, incluidas las facetas en otros campos. Esto le permite observar de un vistazo qué selecciones reducen las opciones más o menos rápidamente.

Ejemplo

Considere una query en la colección sample_airbnb.listingsAndReviews para documentos con un valor accommodates de 3. Si especifica un valor doesNotAffect de cancellation_policy, el recuento de resultados de los depósitos room_type se reduce al número de resultados de cada depósito que también admiten 3 personas, pero el recuento de resultados de los depósitos de cancellation_policy no se ve afectado.

Para más información, consulte el Ejemplo de exclusión de filtros entre facetas.

Cuando ejecute su query utilizando la etapa $search, MongoDB Search almacena los resultados de metadatos en la variable $$SEARCH_META y devuelve solo los resultados de búsqueda. Se puede utilizar la variable $$SEARCH_META en todas las etapas del pipeline de agregación compatibles para ver los resultados de metadatos de su $search query. También puede usar la variable $$SEARCH_META con faceta.agregaciones.

MongoDB recomienda usar la variable $$SEARCH_META solo si necesitas tanto los resultados de la búsqueda como los resultados de los metadatos. De lo contrario, utiliza la:

  • $search etapa solo para los resultados de búsqueda.

  • $searchMeta etapa solo para los resultados de los metadatos.

Solo puedes ejecutar query de faceta en un único campo. No puedes ejecutar consultas de facetas sobre grupos de campos.

Las siguientes limitaciones se aplican a Faceta en la coincidencia de elementos secundarios de un arreglo de documentos incrustados:

  • No puede combinar una opción returnScope de nivel superior con una faceta con ámbito embeddedDocumenten la misma query.

  • Una faceta con ámbito embeddedDocumentsolo devuelve un recuento.

  • No puede combinar drill-sideways faceting (doesNotAffect) con una faceta con ámbito embeddedDocumenten la misma query.

Se aplican las siguientes limitaciones a agregaciones de facetas:

  • No puede utilizar las siguientes opciones con aggregations:

  • No puede aplicar facetas o calcular agregaciones en los siguientes BSON types:

    • binData

    • bool

    • decimal

    • null

    • objectId

    • timestamp

    Para calcular métricas sobre uno de estos tipos, utilice una vista para convertir el campo a un tipo compatible antes de índice.

Los siguientes ejemplos utilizan los datos de muestra. El ejemplo de resultados de metadatos demuestra cómo ejecutar una $searchMeta query con facet para recuperar solo los metadatos de los resultados. El ejemplo de metadatos y resultados de búsqueda demuestra cómo ejecutar una $search query con facet y la variable de agregación $SEARCH_META para recuperar tanto los resultados de búsqueda como los metadatos. El ejemplo returnScope demuestra cómo crear facetas en campos anidados en un arreglo de objetos indexados dinámicamente utilizando el tipo embeddedDocuments. El ejemplo de faceta de alcance incrustado demuestra cómo aplicar facetas solo a los elementos secundarios coincidentes de un arreglo embeddedDocuments. Los ejemplos de exclusión de filtro de selección múltiple y entre facetas demuestran cómo usar doesNotAffect para controlar cómo las facetas afectan los recuentos de las demás. El ejemplo de agregación demuestra cómo calcular métricas para cada cubo de facetas, y el ejemplo de faceta anidada demuestra cómo agrupar resultados por un segundo campo y calcular métricas para cada cubo.

Para obtener más información, se puede consultar Cómo utilizar facetas con la MongoDB Search.

Puede aprender más sobre facet (Operador de búsqueda de MongoDB) en MongoDB Search con nuestro curso y video.

Para obtener más información sobre el uso de facetas en MongoDB Search, puedes tomar la Unidad 9 del Curso de introducción a MongoDB en MongoDB University. La unidad de 1,5 horas incluye un resumen de MongoDB Search y lecciones sobre cómo crear índices de MongoDB Search, ejecutar queries de $search con operadores compuestos y agrupar resultados con facet.

Vea este video para aprender a crear y usar un operador numérico y string facet (MongoDB Search Operador) en su query para agrupar resultados y recuperar un recuento de los resultados en los grupos.

Duración: 11 minutos

Califique esta página