$searchThe
$searchstage performs a full-text search on the specified field or fields. The field or fields must be covered by an MongoDB Search index.
Sintaxis
Una etapa de pipeline $search tiene la siguiente forma de prototipo:
{ $search: { "index": "<index-name>", "<operator-name>"|"<collector-name>": { <operator-specification>|<collector-specification> }, "highlight": { <highlight-options> }, "concurrent": true | false, "count": { <count-options> }, "searchAfter"|"searchBefore": "<encoded-token>", "scoreDetails": true| false, "sort": { <fields-to-sort>: 1 | -1 }, "returnScope": { "path": "<embedded-documents-field-to-retrieve>" } "returnStoredSource": true | false, "tracking": { <tracking-option> } } }
Campos
La etapa $search procesa un documento con los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| Objeto | Condicional | Nombre del colector que se utilizará con la query. Puedes proporcionar un documento que contenga las opciones específicas del colector como valor para este campo. Se requiere ya sea esto o |
| booleano | Opcional | Paralelice la búsqueda entre segmentos en nodos de búsqueda dedicados. Si no tiene nodos de búsqueda separados en su clúster, la búsqueda de MongoDB ignora ese indicador. Si se omite, es por defecto |
| Objeto | Opcional | Documento que especifica las opciones de conteo para obtener un conteo de los resultados. Para obtener más información, consulte Conteo de los resultados de la búsqueda de MongoDB. |
| Objeto | Opcional | Documento que especifica las opciones de resaltado para mostrar los términos de búsqueda en su contexto original. |
| string | Opcional | Nombre del índice de búsqueda de MongoDB que se utilizará. Si se omite, es por defecto Si se nombra el índice La búsqueda de MongoDB no devuelve resultados si escribe mal el nombre del índice o si el índice especificado no existe en el clúster. |
| Objeto | Condicional | Nombre del Operador para la búsqueda. Puedes proporcionar un documento que contenga las opciones específicas del operador como el valor de este campo. Se requiere ya sea esto o |
| Objeto | Opcional | Objeto que establece el contexto de la query en el campo de documento incrustado especificado. También se debe especificar |
| booleano | Condicional | Indicador que especifica si se debe realizar una búsqueda completa de documentos en la base de datos de backend o devolver solo los campos de origen almacenados directamente desde MongoDB Search. Si se omite, es por defecto Para obtener más información, consulta Devolver los campos de origen almacenados. |
| string | Opcional | Punto de referencia para la recuperación de resultados. |
| string | Opcional | Punto de referencia para la recuperación de resultados. |
| booleano | Opcional | Indicador que especifica si se debes recuperar un desglose detallado de la puntuación de los documentos en los resultados. Si se omite, es por defecto |
| Objeto | Opcional | Documento que especifica los campos para ordenar los resultados de MongoDB Search en orden ascendente o descendente. Se puede ordenar por fecha, número (valores enteros, flotantes y dobles) y valores de string. Para aprender más, se debe consular Orden de los resultados de MongoDB Search. |
| Objeto | Opcional | Documento que especifica la opción de seguimiento para recuperar información de análisis sobre los términos de búsqueda. ADVERTENCIA: Esto ahora está obsoleto. El fin oficial de la vida útil y la eliminación completa del soporte tendrá efecto el 5 de diciembre de 2025. Por lo tanto, Atlas ya no recopilará datos de query para mostrarlos en la interfaz de usuario de Atlas a partir de esta fecha y se eliminará la interfaz de usuario para esta funcionalidad. Si hay alguna pregunta o se necesita más asistencia, es necesario contactar a soporte o al ejecutivo de cuenta. |
Comportamiento
$search debe ser la primera etapa de cualquier pipeline en la que aparezca. $search no puede usarse en:
Una etapa de
$facetde pipeline
Variable de agregación
$search devuelve sólo los resultados de la query. Los resultados de los metadatos de la $search query se guardan en la variable de agregación $$SEARCH_META. Se puede utilizar la variable $$SEARCH_META para ver los resultados de metadatos de la $search query.
La variable de agregación $$SEARCH_META se puede usar en cualquier lugar después de una etapa $search en cualquier pipeline, pero no se puede usar después de la etapa $lookup o $unionWith en cualquier pipeline. La variable de agregación $$SEARCH_META no se puede usar en ninguna etapa posterior después de una etapa de $searchMeta.
Ejemplo
Supón el siguiente índice en la colección sample_mflix.movies.
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
La siguiente query busca películas estrenadas cerca del 01 de septiembre de 2011 utilizando la etapa $search. La query incluye lo siguiente:
$projectetapa para excluir todos los campos en los documentos exceptotitleyreleased.$facetetapa que genera un:docscampo con un arreglo de los5mejores resultados de búsquedametacampo con el valor de la variable$$SEARCH_META
db.movies.aggregate([ { "$search": { "near": { "path": "released", "origin": ISODate("2011-09-01T00:00:00.000+00:00"), "pivot": 7776000000 } } }, { $project: { "_id": 0, "title": 1, "released": 1 } }, { "$limit": 5 }, { "$facet": { "docs": [], "meta": [ {"$replaceWith": "$$SEARCH_META"}, {"$limit": 1} ] } } ])
{ "docs" : [ { "title" : "Submarino", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Devil's Playground", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Bag It", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Dos", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "We Were Here", "released" : ISODate("2011-09-01T00:00:00Z") } ], "meta" : [ { "count" : { "lowerBound" : NumberLong(17373) } } ] }
Para obtener más información sobre la variable $$SEARCH_META y su uso, consulta:
Solución de problemas
Si está experimentando problemas con sus queries de búsqueda de MongoDB $search, consulte Solucionar problemas de queries.