Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Referencia de query

Los queries de MongoDB Search adoptan la forma de una etapa del pipeline de agregación. MongoDB Search proporciona las etapas $search y $searchMeta, las cuales deben ser la primera etapa en cualquier pipeline de query, incluidas las subpipelines $lookup y $unionWith. Estas etapas pueden utilizarse junto con otras etapas del pipeline de agregación en tu pipeline de query.

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

Cuando se ejecuta un query, primero se dirige a mongod según la preferencia de lectura configurada. Por defecto, el proceso mongod enruta la consulta de búsqueda a través de un balanceador de carga en el mismo nodo, que distribuye las solicitudes por todos los procesos mongot. Como alternativa, si se establece el parámetro searchNodePreference para la etapa $search, MongoDB Search ejecuta el query en el mismo nodo de búsqueda cada vez.

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

Ver: 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 operador text en una ruta de campo que no está indexada como tipo string. Si un campo está indexado como un tipo de campo de MongoDB Search distinto a string, como stringFacet o autocomplete, MongoDB Search no devuelve un error y devuelve un conjunto de resultados vacío. Debes indexar los campos con valores de tipo de dato string BSON como tipo string para ejecutar queries en los campos con el operador 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.