Definición
facetEl
facetcolector 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
facetcon las etapas$searchy$searchMeta. MongoDB recomienda usarfacetcon la etapa$searchMetapara 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 laSEARCH_METAVariable 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:
Campos anidados dentro de un arreglo de objetos, consulta Ejemplo de returnScope.
Coincidencia de elementos secundarios de un arreglo
embeddedDocumentsmedianteembeddedDocument, consulte Ejemplo de faceta con ámbito incrustado.Campo raíz de tipo
embeddedDocuments, ver Consulta de Facetas.
Sintaxis
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 } }
Campos
Campo | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| 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. |
| 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. |
Requisitos de memoria
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.
Definición de faceta
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:
String 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.
Sintaxis
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 } } } } }
opciones
Opción | Tipo | Descripción | ¿Requerido? |
|---|---|---|---|
| Objeto | Limita los recuentos de cubos de la faceta solo a los documentos secundarios de un arreglo | no |
| 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 | no |
| string | Ruta de campo para expresar facetas. Puede especificar un campo que tenga un índice como un token. | Sí |
| string | Tipo de faceta. El valor debe ser | Sí |
Ejemplo
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.
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 obtener más información sobre estos resultados, consulte Resultados de facetas.
Facetas numéricas
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.
Sintaxis
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 } } } } }
opciones
Opción | Tipo | Descripción | ¿Requerido? |
|---|---|---|---|
| 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 (
| Sí |
| 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 |
| Objeto | Limita los recuentos de cubos de la faceta solo a los documentos secundarios de un arreglo | no |
| string | ruta de campo para facetar. Puedes especificar un campo que se indexe como tipo de número. | Sí |
| string | Tipo de faceta. El valor debe ser | Sí |
Ejemplo
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ósito1980y el límite inferior inclusivo para este depósito2000límite superior exclusivo para el grupo1990
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.
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 obtener más información sobre estos resultados, consulte Resultados de facetas.
Facetas de fecha
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.
Sintaxis
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 } } } } }
opciones
Opción | Tipo | Descripción | ¿Requerido? |
|---|---|---|---|
| arreglo de números | Lista de valores de fecha que especifican los límites de cada franja. Debe especificar:
Cada par adyacente de valores actúa como el límite inferior inclusivo y el límite superior exclusivo para el contenedor. | Sí |
| 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 |
| Objeto | Limita los recuentos de cubos de la faceta solo a los documentos secundarios de un arreglo | no |
| string | Ruta de campo para facetar. Se puede especificar un campo que se indexa como tipo fecha. | Sí |
| string | Tipo de faceta. El valor debe ser | Sí |
Ejemplo
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ósito2000-01-01y el límite inferior inclusivo para este depósito2010-01-01el límite superior exclusivo para el depósito2005-01-01y el límite inferior inclusivo para este depósito2015-01-01límite superior exclusivo para el grupo2010-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.
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 obtener más información sobre estos resultados, consulte Resultados de facetas.
Comparación de los tipos de campos para 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 | |
Numeric | numberFacet (desactualizado) | Array Support: The | |
fecha | dateFacet (desactualizado) | Soporte de arreglos: El tipo |
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.
Faceta en hijos coincidentes de un arreglo de documentos incrustados
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? |
|---|---|---|---|
| string | Campo de tipo | Sí |
| Objeto | operador para ejecutar contra cada documento secundario en el arreglo | 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.
Agregaciones de faceta
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
pathpara cada métricas comotoken,numberodate.Incluya explícitamente la métrica
countsi desea el recuento de depósitos.Solo especifique
aggregationsen 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
aggregationsy 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.
Sintaxis
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.
opciones
Opción | Tipo | Descripción | ¿Requerido? |
|---|---|---|---|
| string | Ruta de campo sobre la que calcular la métrica. Esto es necesario para todos los tipos de métricas, excepto | Condicional |
| string | Tipo de métrica a calcular. El valor puede ser uno de los siguientes:
Para aprender más sobre cada tipo de métrica, consulte Tipos de métricas. | Sí |
Tipos de métricas
Tipo | Requisitos de campo | Descripción |
|---|---|---|
| Ninguno | Cuenta los documentos en el bucket. No especifique un |
| Suma los valores del campo especificado para los documentos en el depósito. | |
| 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 | |
| Ninguno | Devuelve el valor más bajo del campo especificado para los documentos del bucket. |
| Ninguno | Devuelve el valor más alto del campo especificado para los documentos en el segmento. |
| 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. |
| 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.
Consideraciones sobre arreglos
Cada tipo de métrica gestiona un campo que se resuelve en más de un valor, como un arreglo, de forma diferente:
sumyavgomitir el documento.minymaxselecciona el valor más bajo y el más alto en el arreglo para usarlo como elemento representativo para el documento.firstylastdevuelve 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.
Facetas anidadas
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
aggregationssolo en una faceta hoja en un árbol de facetas anidadas. Una definición de faceta que especificafacetsno puede especificar tambiénaggregations. Para calcular métricas para una agrupación intermedia, especifique esa agrupación como una faceta de nivel superior independiente conaggregationsy sin faceta anidada.You can't name a nested facet
count. MongoDB Search reservescountfor 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 esnumBucketspara una faceta de string o el número de depósitos queboundariesydefaultdefinen para una faceta de número o fecha. Por ejemplo, una faceta que solicita20cubos y contiene una faceta anidada que solicita20cubos produce400cubos ú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.
Resultados de Faceta
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 |
|---|---|---|
| Objeto | Identificador único que identifica este bucket de facetas. Este valor coincide con el tipo de faceta en la que se está aplicando. |
| Int | Cantidad de documentos en este bucket de facetas. Para obtener más información sobre el 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 selección múltiple
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_policyroom_typeaccommodates
La faceta cancellation_policy tiene los siguientes cubos:
flexiblemoderatestrict_14_with_grace_periodsuper_strict_30super_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.
SEARCH_META Variable de agregación
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:
$searchetapa solo para los resultados de búsqueda.$searchMetaetapa solo para los resultados de los metadatos.
Limitaciones
Solo puedes ejecutar query de faceta en un único campo. No puedes ejecutar consultas de facetas sobre grupos de campos.
Limitaciones para facetas de ámbito incrustado
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
returnScopede nivel superior con una faceta con ámbitoembeddedDocumenten la misma query.Una faceta con ámbito
embeddedDocumentsolo devuelve un recuento.No puede combinar drill-sideways faceting (
doesNotAffect) con una faceta con ámbitoembeddedDocumenten la misma query.
Limitaciones para agregaciones de faceta
Se aplican las siguientes limitaciones a agregaciones de facetas:
No puede utilizar las siguientes opciones con
aggregations:doesNotAffectpara Faceta de selección múltiple
No puede aplicar facetas o calcular agregaciones en los siguientes BSON types:
binDatabooldecimalnullobjectIdtimestamp
Para calcular métricas sobre uno de estos tipos, utilice una vista para convertir el campo a un tipo compatible antes de índice.
Ejemplos
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.
Continuar Aprendiendo
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.
Aprende con cursos
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.
Aprende observando
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