Docs Menu
Docs Home
/ /

Referencia de query

Las consultas de búsqueda de MongoDB toman la forma de una Etapa de canalización de agregación. MongoDB Search proporciona $searchLas $searchMeta etapas y deben ser la primera etapa de cualquier canalización de consulta, incluidas las $lookup $unionWith subcanalizaciones y. Estas etapas pueden usarse junto con otras etapas de la canalización de agregación en la canalización de consulta.

Según la etapa de pipeline que elijas, tu query devuelve los resultados de una búsqueda en texto completo o metadatos sobre tus resultados de búsqueda:

Etapa de la canalización de agregación
Propósito

Devuelve los resultados de búsqueda de una búsqueda de texto completo.

Devolver los metadatos sobre los resultados de la búsqueda.

MongoDB Search también proporciona operadores del query y coleccionistas que puedes usar dentro de las etapas del pipeline de agregación $search y $searchMeta. Los operadores de MongoDB Search permiten localizar y recuperar datos relevantes de la colección en el clúster. El colector devuelve un documento que representa los resultados de los metadatos de búsqueda.

Se pueden utilizar los operadores de MongoDB Search para realizar queries de términos, frases, formas y puntos geográficos, valores numéricos, documentos similares, términos sinónimos y mucho más.

También se pueden realizar búsquedas utilizando expresiones regulares y comodines. El operador compuesto MongoDB Search permite combinar varios operadores dentro de la etapa $search para realizar una búsqueda compleja y un filtro de datos en función de lo que debe, no debe o debería estar presente en los documentos devueltos por MongoDB Search. También se puede utilizar el operador compuesto para buscar o filtrar documentos en la etapa $search misma. Ejecutar $match después de $search es menos eficaz que ejecutar $search con el operador compuesto.

Para aprender más sobre operadores y recopiladores, consulta Operadores y recopiladores.

mongod y mongot en el mismo nodo

Cuando se ejecuta una query, MongoDB Search utiliza la preferencia de lectura configurada para identificar el nodo en el cual ejecutar el query. El query primero va al proceso de MongoDB, que es mongod para un set de réplicas o mongos para un clúster.

Para un clúster de set de réplicas, el proceso de MongoDB dirige el query al mongot en el mismo nodo. En el caso de los clústeres fragmentados, los datos del clúster se dividen entre las instancias mongod y cada mongot conoce los datos de la mongod solo en el mismo nodo. Por lo tanto, no se pueden ejecutar queries de MongoDB Search que se dirijan a una partición en particular. mongos dirige las consultas a todas las particiones, lo que hace que estas consultas sean de dispersión y recopilación. Si se utilizan zonas para distribuir una colección particionada sobre un subconjunto de las particiones del clúster, MongoDB Search enruta el query a la zona que contiene las particiones de la colección que se está consultando y ejecuta los queries $search solo en las particiones donde se encuentra la colección.

MongoDB Search realiza la búsqueda y la puntuación y devuelve los identificadores de documentos y otros metadatos de búsqueda para los resultados coincidentes a mongod. Luego, el mongod realiza una búsqueda completa de documentos de forma implícita para obtener los resultados coincidentes y devuelve los resultados al cliente.

mongod y mongot en nodos diferentes

Al ejecutar una consulta, esta se dirige primero al mongod según la preferencia de lectura configurada. El mongod proceso enruta la consulta de búsqueda a través de un balanceador de carga en el mismo nodo, que distribuye las solicitudes entre todos los mongot procesos.

El proceso de MongoDB Search mongot realiza la búsqueda y la puntuación, y devuelve los ID de los documentos y los metadatos de los resultados de las coincidencias a mongod. A continuación, mongod realiza una búsqueda en el documento completo para obtener resultados coincidentes y devuelve los resultados al cliente. Si se utiliza la opción $search concurrente en el query, MongoDB Search permite el paralelismo intra-query. Para aprender más, se puede consultar Paralelización de la ejecución de queries entre segmentos.

MongoDB Search asocia una puntuación basada en la relevancia a cada documento del conjunto de resultados. La puntuación basada en la relevancia permite a MongoDB Search devolver los documentos en orden de la puntuación más alta a la más baja. MongoDB Search puntúa los documentos más alto si el término del query aparece con frecuencia en un documento y más bajo si el término del query aparece en muchos documentos de la colección. MongoDB Search también ofrece soporte para personalizar la puntuación por defecto basada en relevancia mediante aumentos, decaimientos u otras opciones de modificación. Para obtener más información sobre la personalización de las puntuaciones resultantes, se puede consultar Puntuar los documentos en los resultados.

Tip

Aprende observando

Ver este video da una visión general de cómo buscar y rastrear los queries con MongoDB Search. En este video, se puede aprender más sobre los operadores de MongoDB Search y cómo MongoDB Search califica los documentos en los resultados.

Duración: 15 minutos

Se pueden crear y ejecutar MongoDB Search queries utilizando los siguientes clientes:

mongot no devuelve ningún error, pero devuelve un conjunto de resultados vacío si el query $search:

  • Hace referencia a un índice que no existe. Si no se especifica un índice por nombre en el query, MongoDB Search por defecto usa un índice llamado default. Si no se tiene un índice llamado default o si el índice que se especificó no existe, MongoDB Search no devuelve un error y devuelve un conjunto de resultados vacío. Se puede especificar un índice válido por su nombre utilizando la opción index.

  • Especifica un campo sin índice. Si se ejecuta un query en un campo que no está indexado, MongoDB Search no devuelve un error y devuelve un conjunto de resultados vacío. Solo se deben especificar campos indexados como valores para el parámetro path. Se puede permitir la asignación dinámica en la definición del índice de la colección para asegurarse de que todos los campos indexables dinámicamente de la colección se indexen automáticamente. Para aprender más, ver mapeo dinámico.

  • Utiliza el text operador en una ruta de campo que no está indexada como string tipo. Si un campo está indexado como un tipo de campo de MongoDB Search distinto string de, como stringFacet autocompleteo, MongoDB Search no devuelve un error y devuelve un conjunto de resultados vacío. Debe indexar los campos con.string Valores de tipo de datos BSON como tipo de cadena para consultar los campos utilizando el operador de texto.

mongot devuelve un error PlanExecutor si tu query $search:

  • Especifica un campo que está indexado como un tipo de dato incorrecto. En este caso, si se ejecuta un query, MongoDB Search devuelve un mensaje de error que identifica el campo que se ha indexado incorrectamente y su tipo de dato correcto. Por ejemplo:

    PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because
    it was not indexed as a "stringFacet" field.

    Por ejemplo, para ejecutar queries de facet (operador de MongoDB Search) contra los campos string, number o date, se debe crear un índice para los campos utilizando el tipo de campo correspondiente de MongoDB Search, como stringFacet, number y date respectivamente. Para aprender más, se puede consultar Tipos de datos compatibles y no compatibles.

Volver

Particiones de índices

En esta página