Docs Menu
Docs Home
/ /

$search

$search

The $search stage performs a full-text search on the specified field or fields. The field or fields must be covered by an MongoDB Search index.

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>
}
}
}

La etapa $search procesa un documento con los siguientes campos:

Campo
Tipo
Necesidad
Descripción

<collector-name>

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 <operator-name>.

concurrent

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 false. Para aprender más, consulte Paralelización de la ejecución de queries entre segmentos.

count

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.

highlight

Objeto

Opcional

Documento que especifica las opciones de resaltado para mostrar los términos de búsqueda en su contexto original.

index

string

Opcional

Nombre del índice de búsqueda de MongoDB que se utilizará. Si se omite, es por defecto default.

Si se nombra el índice default, no se necesita especificar un parámetro index en la etapa de la $search pipeline. Si se asigna un nombre personalizado al índice, se debe especificar este nombre en el parámetro index.

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.

<operator-name>

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 <collector-name>. Utiliza el operador compuesto para ejecutar una query compuesta con múltiples operadores.

returnScope

Objeto

Opcional

Objeto que establece el contexto de la query en el campo de documento incrustado especificado. También se debe especificar returnStoredSource y configurarlo en true.

returnStoredSource

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 false. Debe ser true si especifica returnScope.

Para obtener más información, consulta Devolver los campos de origen almacenados.

searchAfter

string

Opcional

Punto de referencia para la recuperación de resultados. searchAfter devuelve documentos que comienzan inmediatamente después del punto de referencia especificado. El punto de referencia debe ser un token codificado en Base64 generado por la palabra clave $meta searchSequenceToken. Para obtener más información, consulta Paginar los Resultados. Este campo es mutuamente excluyente con el campo searchBefore.

searchBefore

string

Opcional

Punto de referencia para la recuperación de resultados. searchBefore devuelve documentos que empiezan inmediatamente antes del punto de referencia especificado. El punto de referencia debe ser un token codificado en Base64 generado por la palabra clave $meta searchSequenceToken. Para aprender más, consulta Paginar los resultados. Este campo es mutuamente excluyente con el campo searchAfter.

scoreDetails

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 false. Para ver los detalles, debes utilizar la expresión $meta en la etapa $project. Para obtener más información, consulta Detalles de la puntuación.

sort

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.

tracking

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.

$search debe ser la primera etapa de cualquier pipeline en la que aparezca. $search no puede usarse en:

  • ver definición

  • Una etapa de $facet de pipeline

$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:

  • $project etapa para excluir todos los campos en los documentos excepto title y released.

  • $facet etapa que genera un:

    • docs campo con un arreglo de los 5 mejores resultados de búsqueda

    • meta campo 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:

Si está experimentando problemas con sus queries de búsqueda de MongoDB $search, consulte Solucionar problemas de queries.

Volver

Etapas del pipeline

En esta página