La consulta de MongoDB Search devuelve información sobre $search plan del query y estadísticas de ejecución cuando el query se ejecuta con el método explain habilitado. Cuando ejecutas una query con explain, MongoDB Search devuelve un
BSON documento que contiene estadísticas y metadatos que describen cómo se ejecutó la query internamente en Lucene.
Tip
Visualiza los planes del query en el Playground
Genere y vea resúmenes de planes explain con la MongoDB Search Playground.
Sintaxis
db.<myCollection>.explain("<verbosity>").aggregate([ { $search: { "<operator>": { "<operator-options>" } } } ])
nivel de verbosidad
El nivel de verbosidad controla el comportamiento de explain y la cantidad de información devuelta. El valor puede ser uno de los siguientes, en orden de menor a mayor nivel de verbosidad:
Información sobre el plan del query, incluyendo los campos | |
Información sobre el plan del query, incluidos los campos | |
queryPlanner (por defecto) | Información sobre el plan del query. No incluye los campos |
Salida
La query con el método explain devuelve los siguientes campos en el objeto stages.$_internalSearchMongotRemote:
Opción | Tipo | Propósito |
|---|---|---|
| Documento | Contiene la consulta que ejecutaste. |
| Documento | Contiene los |
| arreglo de enteros | Contiene el tamaño de cada lote de documentos que |
Explique los resultados
El método explain devuelve un documento BSON con los siguientes campos en el documento explain.
Opción | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Opcional | Describe las estadísticas de ejecución para el recolector. Si |
| Documento | Opcional | |
| arreglo de documentos | Opcional | Contiene detalles por partición de índices. Esto solo se devuelve si ha configurado dos o más particiones de índice. |
| Documento | Opcional | Contiene metadatos útiles. |
| Documento | Opcional | Describe las estadísticas de ejecución de la query. Esto no se devuelve. Si |
| Documento | Opcional | Detalles relacionados con la recuperación de datos por documento de Lucene después de la ejecución de la query. Esto no se devuelve para el |
| Documento | Opcional | Detalla el uso de recursos de la query cuando se ejecutó. Esto no se devuelve para el nivel de verbosidad |
collectors
El documento collectors BSON contiene los siguientes campos:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Requerido | Estadísticas de todos los colectores de la query. Los valores informados representan el valor máximo en todos los recolectores usados en la query o una suma de la estadística en todos los sub-recolectores. Las estadísticas de tiempo se suman para reflejar el tiempo total dedicado por todos los recolectores durante toda la query. Para obtener más información, consulta allCollectorStats. |
| Documento | Opcional | |
| Documento | Opcional |
allCollectorStats
El documento allCollectorStats BSON describe las estadísticas del recopilador en todos los recopiladores especificados en la query, incluidos facet y sort. Contiene las siguientes claves:
Campo | Descripción |
|---|---|
| Rastrea la duración y el número de resultados recogidos por el recolector. |
| Estadísticas que rastrean la duración total y el número de veces que se solicitó un |
| Estadísticas que rastrean la duración total y la cantidad de veces que un anotador fue configurado en el recolector. |
facet
El facet es un documento BSON que detalla las estadísticas de query y ejecución cuando se especifica una faceta en la query. Contiene los siguientes campos:
Opción | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Opcional | Muestra estadísticas solo para el recolector |
| Documento | Opcional | Muestra estadísticas relacionadas con la creación del objeto interno de Lucene que contiene todos los agrupamientos de facetas. Contiene el campo |
| Documento | Requerido | Mapea el campo sobre el que se está faceteando a su cardinalidad, tanto en los documentos que coinciden con la query como en todo el índice Lucene. Proporciona la siguiente información de cardinalidad para cada campo:
|
sort
El sort es un BSON documento que detalla las estadísticas de query y ejecución cuando se especifica un sort en la query. Contiene los siguientes campos:
Opción | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Opcional | Realiza un seguimiento de las estadísticas relacionadas con la
|
| Documento | Requerido | Asocia el campo que se está ordenando con la lista de tipos de datos presentes en el índice para el campo. |
highlight
El highlight es un BSON documento que detalla las estadísticas de query y ejecución cuando se especifica la resaltado en la query. Contiene los siguientes campos:
Opción | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Lista<String> | Requerido | Lista de todos los campos resaltados. Si especifica un camino wildcard en la sección |
| QueryExecutionArea | Opcional | Estadísticas de invocación y temporización relacionadas con la configuración y ejecución de destacados. Contiene los siguientes campos:
|
indexPartitionExplain
el indexPartitionExplain contiene Resultados de Explain para cada partición de índice. El nivel superior de collectors y query está dentro de la información explain de cada partición de índice y ausente en el nivel superior.
metadata
El metadata contiene metadatos útiles, como los siguientes:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| String | Opcional | Versión actual de |
| String | Opcional | Etiqueta legible por humanos que identifica el |
| String | Opcional | Índice de MongoDB Search utilizado en la query. |
| Documento | Opcional | Opciones de cursor otorgadas a |
| entero | Opcional | Número total de objetos del índice en el índice, incluidos los documentos eliminados. |
query
El query BSON documento describe las estadísticas de ejecución de la query. Contiene los siguientes campos:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| string | Opcional | Ruta al operador, solo si no es la raíz. |
| string | Requerido | Nombre de la query Lucene que el operador de MongoDB Search creó. Consulte |
| string | Opcional | Analizador de MongoDB Search utilizado con la query. |
| Documento | Requerido | Información sobre la query de Lucene. Consulta |
| Documento | Opcional |
|
args
La respuesta de explicación de un comando de búsqueda contiene información sobre la query ejecutada con ese comando. La respuesta en el campo args incluye detalles estructurados de las queries Lucene que MongoDB Search ejecutó para satisfacer una query $search.
Esta sección contiene:
Algunas de las queries Lucene creadas por los operadores de MongoDB Search
Opciones de query de Lucene que se incluyen en el resumen estructurado
Ejemplo de resumen estructurado de consulta Lucene para cada tipo de consulta Lucene
Nota
Sobre los ejemplos
The examples in this section are based on queries run against the sample datasets with the queryPlanner verbosity mode. In the example response, the:
mongotQueryEl campo muestra el operador de MongoDB Search y la query que se ejecutó.explain.typeel campo muestra la query de Lucene que creó el operador.
Para ver ejemplos completos, consulta Ejemplos.
BooleanQueryPara Lucene
BooleanQuery, el resumen estructurado incluye detalles sobre las siguientes opciones:CampoTipoNecesidadDescripciónmustOpcional
Cláusulas que deben coincidir.
mustNotOpcional
Cláusulas que no deben coincidir.
shouldOpcional
Cláusulas que deberían coincidir.
filterOpcional
Cláusulas que deben coincidir todas.
minimumShouldMatchentero
Opcional
El número mínimo de
shouldcláusulas que deben coincidir.
ConstantScoreQueryPara queries de puntuación constante, el resumen estructurado incluye detalles sobre las siguientes opciones:
CampoTipoNecesidadDescripciónqueryRequerido
Hijo de la
ConstantScoreQuery.El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "equals" : { 7 "path" : "host.host_identity_verified", 8 "value" : true 9 } 10 }, 11 "explain" : { 12 "type" : "ConstantScoreQuery", 13 "args" : { 14 "query" : { 15 "type" : "TermQuery", 16 "args" : { 17 "path" : "host.host_identity_verified", 18 "value" : "T" 19 } 20 } 21 } 22 } 23 } 24 }, 25 { 26 "$_internalSearchIdLookup" : { } 27 } 28 ], 29 ... 30 }
FunctionScoreQueryPara consultas
FunctionScoreQueryde Lucene, el resumen estructurado incluye detalles sobre las siguientes opciones:CampoTipoNecesidadDescripciónscoreFunctionstring
Requerido
Expresión de puntuación utilizada en la query.
queryRequerido
La query.
El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "near" : { 7 "path" : "accomodates", 8 "origin" : 8, 9 "pivot" : 2 10 } 11 }, 12 "explain" : { 13 "type" : "BooleanQuery", 14 "args" : { 15 "must" : [ ], 16 "mustNot" : [ ], 17 "should" : [ 18 { 19 "type" : "BooleanQuery", 20 "args" : { 21 "must" : [ ], 22 "mustNot" : [ ], 23 "should" : [ 24 { 25 "type" : "FunctionScoreQuery", 26 "args" : { 27 "scoreFunction" : "expr(pivot / (pivot + abs(origin - value)))", 28 "query" : { 29 "type" : "LongDistanceFeatureQuery", 30 "args" : { }, 31 "stats" : { } 32 } 33 } 34 } 35 ], 36 "filter" : [ 37 { 38 "type" : "PointRangeQuery", 39 "args" : { 40 "path" : "accomodates", 41 "representation" : "double", 42 "gte" : 8.000000000000002, 43 "lte" : NaN 44 } 45 } 46 ], 47 "minimumShouldMatch" : 0 48 } 49 }, 50 { 51 "type" : "LongDistanceFeatureQuery", 52 "args" : { }, 53 "stats" : { } 54 } 55 ], 56 "filter" : [ ], 57 "minimumShouldMatch" : 0 58 } 59 } 60 }, 61 ... 62 }, 63 ... 64 ], 65 ... 66 }
LatLonPointDistanceQueryPara las consultas de Lucene
LatLonPointDistanceQuery, la respuesta contiene únicamente unstats.El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "geoWithin" : { 7 "path" : "address.location", 8 "circle" : { 9 "radius" : 4800, 10 "center" : { 11 "type" : "Point", 12 "coordinates" : [ 13 -122.419472, 14 37.765302 15 ] 16 } 17 } 18 } 19 }, 20 "explain" : { 21 "type" : "LatLonPointDistanceQuery", 22 "args" : { } 23 } 24 } 25 }, 26 ... 27 ], 28 ... 29 }
LatLonShapeQueryPara las consultas de Lucene
LatLonShapeQuery, la respuesta contiene únicamente unstats.El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "geoShape" : { 7 "path" : "address.location", 8 "relation" : "within", 9 "geometry" : { 10 "type" : "Polygon", 11 "coordinates" : [ 12 [ 13 [ -74.3994140625, 40.5305017757 ], 14 [ -74.7290039063, 40.5805846641 ], 15 [ -74.7729492188, 40.9467136651 ], 16 [ -74.0698242188, 41.1290213475 ], 17 [ -73.65234375, 40.9964840144 ], 18 [ -72.6416015625, 40.9467136651 ], 19 [ -72.3559570313, 40.7971774152 ], 20 [ -74.3994140625, 40.5305017757 ] 21 ] 22 ] 23 } 24 } 25 }, 26 "explain" : { 27 "type" : "LatLonShapeQuery", 28 "args" : { } 29 } 30 }, 31 ... 32 }, 33 ... 34 ], 35 ... 36 }
LongDistanceFeatureQueryPara Lucene
LongDistanceFeatureQuery, la respuesta contiene solo unstats.El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_mflix.movies.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "near" : { 7 "path" : "released", 8 "origin" : ISODate("1915-09-13T00:00:00Z"), 9 "pivot" : 7776000000 10 } 11 }, 12 "explain" : { 13 "type" : "LongDistanceFeatureQuery", 14 "args" : { } 15 } 16 }, 17 ... 18 }, 19 ... 20 ], 21 ... 22 }
MultiTermQueryConstantScoreWrapperPara las consultas de Lucene
MultiTermQueryConstantScoreWrapper, el resumen estructurado incluye detalles sobre los siguientes argumentos:CampoTipoNecesidadDescripciónqueriesLista<Resultados de Explain>
Requerido
Lista de consultas.
El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "regex" : { 7 "path" : "access", 8 "query" : "full(.{0,5})", 9 "allowAnalyzedField" : true 10 } 11 }, 12 "explain" : { 13 "type" : "MultiTermQueryConstantScoreWrapper", 14 "args" : { 15 "queries" : [ 16 { 17 "type" : "DefaultQuery", 18 "args" : { 19 "queryType" : "RegexpQuery" 20 } 21 } 22 ] 23 } 24 } 25 }, 26 ... 27 }, 28 ... 29 ], 30 ... 31 }
PhraseQueryPara las consultas de Lucene
PhraseQuery, el resumen estructurado incluye detalles sobre los siguientes argumentos:CampoTipoNecesidadDescripciónpathString
Requerido
Campo indexado para buscar.
queryString
Requerido
String o strings de búsqueda.
slopNúmero
Requerido
Distancia permitida entre palabras en la frase
query.El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "phrase" : { 7 "path" : "description", 8 "query" : "comfortable apartment", 9 "slop" : 2 10 } 11 }, 12 "explain" : { 13 "type" : "PhraseQuery", 14 "args" : { 15 "path" : "description", 16 "query" : "[comfortable, apartment]", 17 "slop" : 2 18 } 19 } 20 }, 21 ... 22 }, 23 ... 24 ], 25 ... 26 }
PointRangeQueryPara las consultas de Lucene
PointRangeQuery, el resumen estructurado incluye detalles sobre los siguientes argumentos:CampoTipoNecesidadDescripciónpathString
Requerido
Campo indexado para buscar.
representationString
Opcional
Representación numérica. Las consultas sobre datos de tipo fecha no incluyen representación.
gteNúmero
Opcional
Límite inferior de la query.
lteNúmero
Opcional
Límite superior de la query.
El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "range" : { 7 "path" : "number_of_reviews", 8 "gt" : 5 9 } 10 }, 11 "explain" : { 12 "type" : "BooleanQuery", 13 "args" : { 14 "must" : [ ], 15 "mustNot" : [ ], 16 "should" : [ 17 { 18 "type" : "PointRangeQuery", 19 "args" : { 20 "path" : "number_of_reviews", 21 "representation" : "double", 22 "gte" : 5.000000000000001 23 } 24 }, 25 { 26 "type" : "PointRangeQuery", 27 "args" : { 28 "path" : "number_of_reviews", 29 "representation" : "int64", 30 "gte" : NumberLong(6) 31 } 32 } 33 ], 34 "filter" : [ ], 35 "minimumShouldMatch" : 0 36 } 37 } 38 }, 39 ... 40 }, 41 ... 42 ], 43 ... 44 }
TermQueryPara consultas de términos, el resumen estructurado incluye detalles sobre los siguientes argumentos:
CampoTipoNecesidadDescripciónpathString
Requerido
Campo indexado para buscar.
valueString
Requerido
string a buscar.
El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "queryString" : { 7 "defaultPath" : "summary", 8 "query" : "quiet" 9 } 10 }, 11 "explain" : { 12 "type" : "TermQuery", 13 "args" : { 14 "path" : "summary", 15 "value" : "quiet" 16 } 17 } 18 }, 19 ... 20 }, 21 ... 22 ], 23 ... 24 }
DefaultLas queries de Lucene que no están definidas explícitamente por otra query de Lucene se serializan utilizando la query por defecto. El resumen estructurado incluye detalles sobre las siguientes opciones:
CampoTipoNecesidadDescripciónqueryTypeString
Requerido.
Tipo de query de Lucene.
El siguiente ejemplo muestra la respuesta
explainde una consulta ejecutada en la colecciónsample_airbnb.listingsAndReviews.1 { 2 "stages" : [ 3 { 4 "$_internalSearchMongotRemote" : { 5 "mongotQuery" : { 6 "near" : { 7 "origin" : { 8 "type" : "Point", 9 "coordinates" : [ 10 -8.61308, 11 41.1413 12 ] 13 }, 14 "pivot" : 1000, 15 "path" : "address.location" 16 } 17 }, 18 "explain" : { 19 "type" : "DefaultQuery", 20 "args" : { 21 "queryType" : "LatLonPointDistanceFeatureQuery" 22 } 23 } 24 }, 25 ... 26 }, 27 ... 28 ], 29 ... 30 }
stats
La respuesta explain para los de nivel de verbosidad executionStats y allPlansExecution incluye un campo stats que contiene información sobre cuánto tiempo emplea una query en varias etapas de ejecución de la query.
Desglose por tiempo
El desglose de temporización describe estadísticas de ejecución pertinentes a una áreas de query ejecución. Los siguientes campos muestran el desglose temporal:
Campo | Tipo | Descripción |
|---|---|---|
| Long | |
| Documento | Cantidad de veces que se ejecutaron las tareas incluidas en esta área. El valor es un mapa de nombres de tareas con su recuento de invocaciones. |
Áreas de Consulta
Las estadísticas están disponibles para las siguientes áreas de query:
Opción | Descripción | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Estadísticas relacionadas con la ejecución de la Lucene query. Hay dos tareas cuyos recuentos de convocación se enumeran en esta área:
El tiempo empleado en esta área está relacionado con la estructura de la query y no se basa en la cantidad de resultados que se hayan iterado y calificado. Por ejemplo: | |||||||||||
| Estadísticas relacionadas con la iteración y la coincidencia de documentos de resultados. Esta estadística muestra el tiempo que requiere determinar qué documento es la siguiente coincidencia. El tiempo dedicado a comparar resultados puede variar significativamente dependiendo de la naturaleza de la query. En esta área se enumeran dos tareas cuyos recuentos de invocación son:
Por ejemplo: | |||||||||||
| Estadísticas relacionadas con la puntuación de los documentos en el conjunto de resultados. Hay dos tareas cuyos recuentos de invocación se enumeran en esta área:
Por ejemplo: |
resultMaterialization
El documento resultMaterialization muestra la cantidad de tiempo mongot que se tarda en lograr lo siguiente:
Recupere datos de resultados almacenados en Lucene en forma de
_idostoredSource.Serializa los datos en formato BSON antes de enviarlos a
mongod.
Para obtener más información, consulta stats.
resourceUsage
El documento resourceUsage muestra el recurso utilizado para ejecutar la query. Contiene los siguientes campos:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Long | Requerido | Número de fallos de página mayores, que ocurren cuando el sistema no puede encontrar los datos requeridos en la memoria, lo que resulta en la lectura desde el almacén de respaldo, como el disco, durante la ejecución de la query. |
| Long | Requerido | Número de fallos menores de página, que ocurren cuando los datos están en la caché de páginas, pero aún no se han mapeado a la tabla de páginas del proceso. |
| Long | Requerido | Cantidad de tiempo de CPU, en milisegundos, pasado en espacio de usuario. |
| Long | Requerido | Cantidad de tiempo de CPU, en milisegundos, utilizado en el espacio del sistema. |
| entero | Requerido | Número máximo de hilos que |
| entero | Requerido | Cantidad total de lotes que se solicitaron |
Ejemplos
Los siguientes ejemplos utilizan la colección movies en la base de datos sample_mflix.
Tip
If you've already loaded the sample dataset, refer to the MongoDB Search Quick Start tutorial to create an index definition and run MongoDB Search queries.
allPlansExecution
El siguiente ejemplo utiliza diferentes operadores para consultar el campo title con el modo allPlansExecution nivel de verbosidad.
db.movies.explain("allPlansExecution").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { 8 path: 'title', 9 query: 'yark', 10 fuzzy: { maxEdits: 1, maxExpansions: 100 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [], 18 mustNot: [], 19 should: [ 20 { 21 type: 'BoostQuery', 22 args: { 23 query: { 24 type: 'TermQuery', 25 args: { path: 'title', value: 'mark' }, 26 stats: { 27 context: { millisElapsed: 0 }, 28 match: { millisElapsed: 0 }, 29 score: { millisElapsed: 0 } 30 } 31 }, 32 boost: 0.75 33 }, 34 stats: { 35 context: { 36 millisElapsed: 0.209279, 37 invocationCounts: { 38 createWeight: Long('2'), 39 createScorer: Long('18') 40 } 41 }, 42 match: { 43 millisElapsed: 0.028079, 44 invocationCounts: { nextDoc: Long('22') } 45 }, 46 score: { 47 millisElapsed: 0.01706, 48 invocationCounts: { score: Long('16') } 49 } 50 } 51 }, 52 { 53 type: 'BoostQuery', 54 args: { 55 query: { 56 type: 'TermQuery', 57 args: { path: 'title', value: 'yard' }, 58 stats: { 59 context: { millisElapsed: 0 }, 60 match: { millisElapsed: 0 }, 61 score: { millisElapsed: 0 } 62 } 63 }, 64 boost: 0.75 65 }, 66 stats: { 67 context: { 68 millisElapsed: 0.136254, 69 invocationCounts: { 70 createWeight: Long('2'), 71 createScorer: Long('14') 72 } 73 }, 74 match: { 75 millisElapsed: 0.008556, 76 invocationCounts: { nextDoc: Long('10') } 77 }, 78 score: { 79 millisElapsed: 0.006096, 80 invocationCounts: { score: Long('6') } 81 } 82 } 83 }, 84 { 85 type: 'BoostQuery', 86 args: { 87 query: { 88 type: 'TermQuery', 89 args: { path: 'title', value: 'york' }, 90 stats: { 91 context: { millisElapsed: 0 }, 92 match: { millisElapsed: 0 }, 93 score: { millisElapsed: 0 } 94 } 95 }, 96 boost: 0.75 97 }, 98 stats: { 99 context: { 100 millisElapsed: 0.303568, 101 invocationCounts: { 102 createWeight: Long('2'), 103 createScorer: Long('18') 104 } 105 }, 106 match: { 107 millisElapsed: 0.374856, 108 invocationCounts: { nextDoc: Long('62') } 109 }, 110 score: { 111 millisElapsed: 0.892383, 112 invocationCounts: { score: Long('56') } 113 } 114 } 115 }, 116 { 117 type: 'BoostQuery', 118 args: { 119 query: { 120 type: 'TermQuery', 121 args: { path: 'title', value: 'ark' }, 122 stats: { 123 context: { millisElapsed: 0 }, 124 match: { millisElapsed: 0 }, 125 score: { millisElapsed: 0 } 126 } 127 }, 128 boost: 0.6666666269302368 129 }, 130 stats: { 131 context: { 132 millisElapsed: 8.379562, 133 invocationCounts: { 134 createWeight: Long('2'), 135 createScorer: Long('10') 136 } 137 }, 138 match: { 139 millisElapsed: 2.073272, 140 invocationCounts: { nextDoc: Long('6') } 141 }, 142 score: { 143 millisElapsed: 0.004063, 144 invocationCounts: { score: Long('4') } 145 } 146 } 147 }, 148 { 149 type: 'BoostQuery', 150 args: { 151 query: { 152 type: 'TermQuery', 153 args: { path: 'title', value: 'dark' }, 154 stats: { 155 context: { millisElapsed: 0 }, 156 match: { millisElapsed: 0 }, 157 score: { millisElapsed: 0 } 158 } 159 }, 160 boost: 0.75 161 }, 162 stats: { 163 context: { 164 millisElapsed: 0.679029, 165 invocationCounts: { 166 createWeight: Long('2'), 167 createScorer: Long('18') 168 } 169 }, 170 match: { 171 millisElapsed: 5.500198, 172 invocationCounts: { nextDoc: Long('172') } 173 }, 174 score: { 175 millisElapsed: 2.465502, 176 invocationCounts: { score: Long('166') } 177 } 178 } 179 }, 180 { 181 type: 'BoostQuery', 182 args: { 183 query: { 184 type: 'TermQuery', 185 args: { path: 'title', value: 'park' }, 186 stats: { 187 context: { millisElapsed: 0 }, 188 match: { millisElapsed: 0 }, 189 score: { millisElapsed: 0 } 190 } 191 }, 192 boost: 0.75 193 }, 194 stats: { 195 context: { 196 millisElapsed: 0.221919, 197 invocationCounts: { 198 createWeight: Long('2'), 199 createScorer: Long('18') 200 } 201 }, 202 match: { 203 millisElapsed: 0.116139, 204 invocationCounts: { nextDoc: Long('60') } 205 }, 206 score: { 207 millisElapsed: 0.056817, 208 invocationCounts: { score: Long('54') } 209 } 210 } 211 } 212 ], 213 filter: [], 214 minimumShouldMatch: 0 215 }, 216 stats: { 217 context: { 218 millisElapsed: 25.303419, 219 invocationCounts: { createWeight: Long('2'), createScorer: Long('12') } 220 }, 221 match: { 222 millisElapsed: 10.533183, 223 invocationCounts: { nextDoc: Long('308') } 224 }, 225 score: { 226 millisElapsed: 5.501189, 227 invocationCounts: { score: Long('302') } 228 } 229 } 230 }, 231 collectStats: { 232 allCollectorStats: { 233 millisElapsed: 6.735626, 234 invocationCounts: { 235 collect: Long('302'), 236 competitiveIterator: Long('6'), 237 setScorer: Long('6') 238 } 239 }, 240 facet: { collectorStats: { millisElapsed: 0 } } 241 }, 242 resultMaterialization: { 243 stats: { 244 millisElapsed: 176.613905, 245 invocationCounts: { retrieveAndSerialize: Long('2') } 246 } 247 }, 248 metadata: { 249 <hostname>.mongodb.netmongotVersion: '1.42.0', 250 mongotHostName: '<hostname>.mongodb.net', 251 indexName: 'default', 252 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 253 totalLuceneDocs: 21349 254 }, 255 resourceUsage: { 256 majorFaults: Long('99'), 257 minorFaults: Long('192'), 258 userTimeMs: Long('80'), 259 systemTimeMs: Long('10'), 260 maxReportingThreads: 1, 261 numBatches: 2 262 } 263 }, 264 requiresSearchMetaCursor: false, 265 internalMongotBatchSizeHistory: [ Long('108'), Long('162') ] 266 }, 267 nReturned: Long('151'), 268 executionTimeMillisEstimate: Long('83') 269 }, 270 { 271 '$_internalSearchIdLookup': { 272 subPipeline: [ 273 { '$match': { _id: { '$eq': '_id placeholder' } } } 274 ], 275 totalDocsExamined: Long('151'), 276 totalKeysExamined: Long('151'), 277 numDocsFilteredByIdLookup: Long('0') 278 }, 279 nReturned: Long('151'), 280 executionTimeMillisEstimate: Long('88') 281 } 282 ], 283 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 284 serverInfo: { 285 host: '<hostname>.mongodb.net', 286 port: 27017, 287 version: '8.2.0', 288 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 289 }, 290 serverParameters: { 291 ... 292 }, 293 command: { 294 aggregate: 'movies', 295 pipeline: [ 296 { 297 '$search': { 298 text: { 299 path: 'title', 300 query: 'yark', 301 fuzzy: { maxEdits: 1, maxExpansions: 100 } 302 } 303 } 304 } 305 ], 306 cursor: {}, 307 '$db': 'sample_mflix' 308 }, 309 ok: 1, 310 '$clusterTime': { 311 clusterTime: Timestamp({ t: 1758295936, i: 19 }), 312 signature: { 313 hash: Binary.createFromBase64('+CanjrL9jdXPTLa2sUaNPtImkBc=', 0), 314 keyId: Long('7551379485140975621') 315 } 316 }, 317 operationTime: Timestamp({ t: 1758295936, i: 19 }) 318 }
db.movies.explain("allPlansExecution").aggregate([ { $search: { "text": { "path": "title", "query": "prince" }, "highlight": { "path": "title", "maxNumPassages": 1, "maxCharsToExamine": 40 } } }, { $project: { "description": 1, "_id": 0, "highlights": { "$meta": "searchHighlights" } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { path: 'title', query: 'prince' }, 8 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 9 }, 10 explain: { 11 query: { 12 type: 'TermQuery', 13 args: { path: 'title', value: 'prince' }, 14 stats: { 15 context: { 16 millisElapsed: 9.880819, 17 invocationCounts: { createWeight: Long('1'), createScorer: Long('6') } 18 }, 19 match: { 20 millisElapsed: 3.566358, 21 invocationCounts: { nextDoc: Long('28') } 22 }, 23 score: { 24 millisElapsed: 2.762687, 25 invocationCounts: { score: Long('25') } 26 } 27 } 28 }, 29 collectStats: { 30 allCollectorStats: { 31 millisElapsed: 3.238152, 32 invocationCounts: { 33 collect: Long('25'), 34 competitiveIterator: Long('3'), 35 setScorer: Long('3') 36 } 37 }, 38 facet: { collectorStats: { millisElapsed: 0 } } 39 }, 40 highlight: { 41 resolvedHighlightPaths: [ '$type:string/title' ], 42 stats: { 43 millisElapsed: 157.543967, 44 invocationCounts: { 45 executeHighlight: Long('1'), 46 setupHighlight: Long('1') 47 } 48 } 49 }, 50 resultMaterialization: { 51 stats: { 52 millisElapsed: 3.781115, 53 invocationCounts: { retrieveAndSerialize: Long('1') } 54 } 55 }, 56 metadata: { 57 <hostname>.mongodb.netmongotVersion: '1.42.0', 58 mongotHostName: '<hostname>.mongodb.net', 59 indexName: 'default', 60 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 61 totalLuceneDocs: 21349 62 }, 63 resourceUsage: { 64 majorFaults: Long('42'), 65 minorFaults: Long('167'), 66 userTimeMs: Long('50'), 67 systemTimeMs: Long('0'), 68 maxReportingThreads: 1, 69 numBatches: 1 70 } 71 }, 72 requiresSearchMetaCursor: false, 73 internalMongotBatchSizeHistory: [ Long('108') ] 74 }, 75 nReturned: Long('25'), 76 executionTimeMillisEstimate: Long('0') 77 }, 78 { 79 '$_internalSearchIdLookup': { 80 subPipeline: [ 81 { '$match': { _id: { '$eq': '_id placeholder' } } } 82 ], 83 totalDocsExamined: Long('25'), 84 totalKeysExamined: Long('25'), 85 numDocsFilteredByIdLookup: Long('0') 86 }, 87 nReturned: Long('25'), 88 executionTimeMillisEstimate: Long('1') 89 }, 90 { 91 '$project': { 92 description: true, 93 highlights: { '$meta': 'searchHighlights' }, 94 _id: false 95 }, 96 nReturned: Long('25'), 97 executionTimeMillisEstimate: Long('1') 98 } 99 ], 100 queryShapeHash: 'D08444272924C1E04A6E99D0CD4BF82FD929893862B3356F79EC18BBD1F0EF0C', 101 serverInfo: { 102 host: '<hostname>.mongodb.net', 103 port: 27017, 104 version: '8.2.0', 105 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 106 }, 107 serverParameters: { 108 internalQueryFacetBufferSizeBytes: 104857600, 109 internalQueryFacetMaxOutputDocSizeBytes: 104857600, 110 internalLookupStageIntermediateDocumentMaxSizeBytes: 104857600, 111 internalDocumentSourceGroupMaxMemoryBytes: 104857600, 112 internalQueryMaxBlockingSortMemoryUsageBytes: 104857600, 113 internalQueryProhibitBlockingMergeOnMongoS: 0, 114 internalQueryMaxAddToSetBytes: 104857600, 115 internalDocumentSourceSetWindowFieldsMaxMemoryBytes: 104857600, 116 internalQueryFrameworkControl: 'trySbeRestricted', 117 internalQueryPlannerIgnoreIndexWithCollationForRegex: 1 118 }, 119 command: { 120 aggregate: 'movies', 121 pipeline: [ 122 { 123 '$search': { 124 text: { path: 'title', query: 'prince' }, 125 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 126 } 127 }, 128 { 129 '$project': { 130 description: 1, 131 _id: 0, 132 highlights: { '$meta': 'searchHighlights' } 133 } 134 } 135 ], 136 cursor: {}, 137 '$db': 'sample_mflix' 138 }, 139 ok: 1, 140 '$clusterTime': { 141 clusterTime: Timestamp({ t: 1758302099, i: 1 }), 142 signature: { 143 hash: Binary.createFromBase64('pUGxwCVnDOBIObmhURJQ1a1UwC8=', 0), 144 keyId: Long('7551379485140975621') 145 } 146 }, 147 operationTime: Timestamp({ t: 1758302099, i: 1 }) 148 }
db.movies.explain("allPlansExecution").aggregate([ { "$searchMeta": { "facet": { "operator": { "near": { "path": "released", "origin": ISODate("1921-11-01T00:00:00.000+00:00"), "pivot": 7776000000 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" }, "yearFacet" : { "type" : "number", "path" : "year", "boundaries" : [1910,1920,1930,1940] } } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$searchMeta': { 6 mongotQuery: { 7 facet: { 8 operator: { 9 near: { 10 path: 'released', 11 origin: ISODate('1921-11-01T00:00:00.000Z'), 12 pivot: 7776000000 13 } 14 }, 15 facets: { 16 genresFacet: { type: 'string', path: 'genres' }, 17 yearFacet: { 18 type: 'number', 19 path: 'year', 20 boundaries: [ 1910, 1920, 1930, 1940 ] 21 } 22 } 23 } 24 }, 25 explain: { 26 query: { 27 type: 'LongDistanceFeatureQuery', 28 args: {}, 29 stats: { 30 context: { 31 millisElapsed: 4.141763, 32 invocationCounts: { createWeight: Long('1'), createScorer: Long('6') } 33 }, 34 match: { 35 millisElapsed: 24.986327, 36 invocationCounts: { nextDoc: Long('20881') } 37 }, 38 score: { 39 millisElapsed: 33.324657, 40 invocationCounts: { score: Long('20878') } 41 } 42 } 43 }, 44 collectStats: { 45 allCollectorStats: { 46 millisElapsed: 72.243101, 47 invocationCounts: { 48 collect: Long('20878'), 49 competitiveIterator: Long('3'), 50 setScorer: Long('3') 51 } 52 }, 53 facet: { 54 collectorStats: { 55 millisElapsed: 10.424621, 56 invocationCounts: { collect: Long('20878'), setScorer: Long('3') } 57 }, 58 createCountsStats: { 59 millisElapsed: 60.095261, 60 invocationCounts: { generateFacetCounts: Long('2') } 61 }, 62 stringFacetCardinalities: { genresFacet: { queried: 10, total: 25 } } 63 } 64 }, 65 resultMaterialization: { 66 stats: { 67 millisElapsed: 13.764287, 68 invocationCounts: { retrieveAndSerialize: Long('1') } 69 } 70 }, 71 metadata: { 72 <hostname>.mongodb.netmongotVersion: '1.42.0', 73 mongotHostName: '<hostname>.mongodb.net', 74 indexName: 'default', 75 totalLuceneDocs: 21349 76 }, 77 resourceUsage: { 78 majorFaults: Long('10'), 79 minorFaults: Long('13'), 80 userTimeMs: Long('20'), 81 systemTimeMs: Long('0'), 82 maxReportingThreads: 1, 83 numBatches: 1 84 } 85 }, 86 requiresSearchMetaCursor: true 87 }, 88 nReturned: Long('1'), 89 executionTimeMillisEstimate: Long('336') 90 } 91 ], 92 queryShapeHash: '582DB864C9BCFB96896CF1A3079CF70FAC10A9A1E19E8D66DF20A2BB40424FB5', 93 serverInfo: { 94 host: '<hostname>.mongodb.net', 95 port: 27017, 96 version: '8.2.0', 97 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 98 }, 99 serverParameters: { 100 ... 101 }, 102 command: { 103 aggregate: 'movies', 104 pipeline: [ 105 { 106 '$searchMeta': { 107 facet: { 108 operator: { 109 near: { 110 path: 'released', 111 origin: ISODate('1921-11-01T00:00:00.000Z'), 112 pivot: 7776000000 113 } 114 }, 115 facets: { 116 genresFacet: { type: 'string', path: 'genres' }, 117 yearFacet: { 118 type: 'number', 119 path: 'year', 120 boundaries: [ 1910, 1920, 1930, 1940 ] 121 } 122 } 123 } 124 } 125 } 126 ], 127 cursor: {}, 128 '$db': 'sample_mflix' 129 }, 130 ok: 1, 131 '$clusterTime': { 132 clusterTime: Timestamp({ t: 1758304279, i: 1 }), 133 signature: { 134 hash: Binary.createFromBase64('DI9+ZTogU1QxHCWId6QLcA4R4tQ=', 0), 135 keyId: Long('7551379485140975621') 136 } 137 }, 138 operationTime: Timestamp({ t: 1758304279, i: 1 }) 139 }
db.movies.explain("allPlansExecution").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { 8 path: 'title', 9 query: 'yark', 10 fuzzy: { maxEdits: 1, maxExpansions: 100 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [], 18 mustNot: [], 19 should: [ 20 { 21 type: 'BoostQuery', 22 args: { 23 query: { 24 type: 'TermQuery', 25 args: { path: 'title', value: 'mark' }, 26 stats: { 27 context: { millisElapsed: 0 }, 28 match: { millisElapsed: 0 }, 29 score: { millisElapsed: 0 } 30 } 31 }, 32 boost: 0.75 33 }, 34 stats: { 35 context: { 36 millisElapsed: 0.164466, 37 invocationCounts: { 38 createWeight: Long('2'), 39 createScorer: Long('18') 40 } 41 }, 42 match: { 43 millisElapsed: 0.055889, 44 invocationCounts: { nextDoc: Long('22') } 45 }, 46 score: { 47 millisElapsed: 0.01638, 48 invocationCounts: { score: Long('16') } 49 } 50 } 51 }, 52 { 53 type: 'BoostQuery', 54 args: { 55 query: { 56 type: 'TermQuery', 57 args: { path: 'title', value: 'yard' }, 58 stats: { 59 context: { millisElapsed: 0 }, 60 match: { millisElapsed: 0 }, 61 score: { millisElapsed: 0 } 62 } 63 }, 64 boost: 0.75 65 }, 66 stats: { 67 context: { 68 millisElapsed: 0.109841, 69 invocationCounts: { 70 createWeight: Long('2'), 71 createScorer: Long('14') 72 } 73 }, 74 match: { 75 millisElapsed: 0.009747, 76 invocationCounts: { nextDoc: Long('10') } 77 }, 78 score: { 79 millisElapsed: 0.005449, 80 invocationCounts: { score: Long('6') } 81 } 82 } 83 }, 84 { 85 type: 'BoostQuery', 86 args: { 87 query: { 88 type: 'TermQuery', 89 args: { path: 'title', value: 'york' }, 90 stats: { 91 context: { millisElapsed: 0 }, 92 match: { millisElapsed: 0 }, 93 score: { millisElapsed: 0 } 94 } 95 }, 96 boost: 0.75 97 }, 98 stats: { 99 context: { 100 millisElapsed: 0.140144, 101 invocationCounts: { 102 createWeight: Long('2'), 103 createScorer: Long('18') 104 } 105 }, 106 match: { 107 millisElapsed: 0.058885, 108 invocationCounts: { nextDoc: Long('62') } 109 }, 110 score: { 111 millisElapsed: 0.877508, 112 invocationCounts: { score: Long('56') } 113 } 114 } 115 }, 116 { 117 type: 'BoostQuery', 118 args: { 119 query: { 120 type: 'TermQuery', 121 args: { path: 'title', value: 'ark' }, 122 stats: { 123 context: { millisElapsed: 0 }, 124 match: { millisElapsed: 0 }, 125 score: { millisElapsed: 0 } 126 } 127 }, 128 boost: 0.6666666269302368 129 }, 130 stats: { 131 context: { 132 millisElapsed: 0.26056, 133 invocationCounts: { 134 createWeight: Long('2'), 135 createScorer: Long('10') 136 } 137 }, 138 match: { 139 millisElapsed: 1.028141, 140 invocationCounts: { nextDoc: Long('6') } 141 }, 142 score: { 143 millisElapsed: 0.004226, 144 invocationCounts: { score: Long('4') } 145 } 146 } 147 }, 148 { 149 type: 'BoostQuery', 150 args: { 151 query: { 152 type: 'TermQuery', 153 args: { path: 'title', value: 'dark' }, 154 stats: { 155 context: { millisElapsed: 0 }, 156 match: { millisElapsed: 0 }, 157 score: { millisElapsed: 0 } 158 } 159 }, 160 boost: 0.75 161 }, 162 stats: { 163 context: { 164 millisElapsed: 0.3029, 165 invocationCounts: { 166 createWeight: Long('2'), 167 createScorer: Long('18') 168 } 169 }, 170 match: { 171 millisElapsed: 2.294511, 172 invocationCounts: { nextDoc: Long('172') } 173 }, 174 score: { 175 millisElapsed: 1.806661, 176 invocationCounts: { score: Long('166') } 177 } 178 } 179 }, 180 { 181 type: 'BoostQuery', 182 args: { 183 query: { 184 type: 'TermQuery', 185 args: { path: 'title', value: 'park' }, 186 stats: { 187 context: { millisElapsed: 0 }, 188 match: { millisElapsed: 0 }, 189 score: { millisElapsed: 0 } 190 } 191 }, 192 boost: 0.75 193 }, 194 stats: { 195 context: { 196 millisElapsed: 0.154143, 197 invocationCounts: { 198 createWeight: Long('2'), 199 createScorer: Long('18') 200 } 201 }, 202 match: { 203 millisElapsed: 0.052283, 204 invocationCounts: { nextDoc: Long('60') } 205 }, 206 score: { 207 millisElapsed: 0.050278, 208 invocationCounts: { score: Long('54') } 209 } 210 } 211 } 212 ], 213 filter: [], 214 minimumShouldMatch: 0 215 }, 216 stats: { 217 context: { 218 millisElapsed: 2.024454, 219 invocationCounts: { createWeight: Long('2'), createScorer: Long('12') } 220 }, 221 match: { 222 millisElapsed: 4.020593, 223 invocationCounts: { nextDoc: Long('308') } 224 }, 225 score: { 226 millisElapsed: 3.181962, 227 invocationCounts: { score: Long('302') } 228 } 229 } 230 }, 231 collectStats: { 232 allCollectorStats: { 233 millisElapsed: 4.062801, 234 invocationCounts: { 235 collect: Long('302'), 236 competitiveIterator: Long('6'), 237 setScorer: Long('6') 238 } 239 }, 240 facet: { collectorStats: { millisElapsed: 0 } } 241 }, 242 resultMaterialization: { 243 stats: { 244 millisElapsed: 127.205476, 245 invocationCounts: { retrieveAndSerialize: Long('2') } 246 } 247 }, 248 metadata: { 249 <hostname>.mongodb.netmongotVersion: '1.42.0', 250 mongotHostName: '<hostname>.mongodb.net', 251 indexName: 'default', 252 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 253 totalLuceneDocs: 21349 254 }, 255 resourceUsage: { 256 majorFaults: Long('100'), 257 minorFaults: Long('31'), 258 userTimeMs: Long('20'), 259 systemTimeMs: Long('10'), 260 maxReportingThreads: 1, 261 numBatches: 2 262 } 263 }, 264 requiresSearchMetaCursor: false, 265 internalMongotBatchSizeHistory: [ Long('108'), Long('162') ] 266 }, 267 nReturned: Long('151'), 268 executionTimeMillisEstimate: Long('57') 269 }, 270 { 271 '$_internalSearchIdLookup': { 272 subPipeline: [ 273 { '$match': { _id: { '$eq': '_id placeholder' } } } 274 ], 275 totalDocsExamined: Long('151'), 276 totalKeysExamined: Long('151'), 277 numDocsFilteredByIdLookup: Long('0') 278 }, 279 nReturned: Long('151'), 280 executionTimeMillisEstimate: Long('64') 281 } 282 ], 283 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 284 serverInfo: { 285 host: '<hostname>.mongodb.net', 286 port: 27017, 287 version: '8.2.0', 288 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 289 }, 290 serverParameters: { 291 ... 292 }, 293 command: { 294 aggregate: 'movies', 295 pipeline: [ 296 { 297 '$search': { 298 text: { 299 path: 'title', 300 query: 'yark', 301 fuzzy: { maxEdits: 1, maxExpansions: 100 } 302 } 303 } 304 } 305 ], 306 cursor: {}, 307 '$db': 'sample_mflix' 308 }, 309 ok: 1, 310 '$clusterTime': { 311 clusterTime: Timestamp({ t: 1758302299, i: 1 }), 312 signature: { 313 hash: Binary.createFromBase64('pCKOPlBY/K4IObOkqDlOSnbRqw0=', 0), 314 keyId: Long('7551379485140975621') 315 } 316 }, 317 operationTime: Timestamp({ t: 1758302299, i: 1 }) 318 }
queryPlanner
El siguiente ejemplo utiliza diferentes operadores para consultar el campo title con el modo queryPlanner nivel de verbosidad.
db.movies.explain("queryPlanner").aggregate([ { $search: { "text": { "path": "title", "query": "yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { 8 path: 'title', 9 query: 'yark', 10 fuzzy: { maxEdits: 1, maxExpansions: 100 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [], 18 mustNot: [], 19 should: [ 20 { 21 type: 'BoostQuery', 22 args: { 23 query: { 24 type: 'TermQuery', 25 args: { path: 'title', value: 'park' } 26 }, 27 boost: 0.75 28 } 29 }, 30 { 31 type: 'BoostQuery', 32 args: { 33 query: { 34 type: 'TermQuery', 35 args: { path: 'title', value: 'york' } 36 }, 37 boost: 0.75 38 } 39 }, 40 { 41 type: 'BoostQuery', 42 args: { 43 query: { 44 type: 'TermQuery', 45 args: { path: 'title', value: 'dark' } 46 }, 47 boost: 0.75 48 } 49 }, 50 { 51 type: 'BoostQuery', 52 args: { 53 query: { 54 type: 'TermQuery', 55 args: { path: 'title', value: 'mark' } 56 }, 57 boost: 0.75 58 } 59 }, 60 { 61 type: 'BoostQuery', 62 args: { 63 query: { 64 type: 'TermQuery', 65 args: { path: 'title', value: 'yard' } 66 }, 67 boost: 0.75 68 } 69 }, 70 { 71 type: 'BoostQuery', 72 args: { 73 query: { 74 type: 'TermQuery', 75 args: { path: 'title', value: 'ark' } 76 }, 77 boost: 0.6666666269302368 78 } 79 } 80 ], 81 filter: [], 82 minimumShouldMatch: 0 83 } 84 }, 85 metadata: { 86 <hostname>.mongodb.netmongotVersion: '1.42.0', 87 mongotHostName: '<hostname>.mongodb.net', 88 indexName: 'default', 89 totalLuceneDocs: 21349 90 } 91 }, 92 requiresSearchMetaCursor: false 93 } 94 }, 95 { 96 '$_internalSearchIdLookup': { 97 subPipeline: [ 98 { '$match': { _id: { '$eq': '_id placeholder' } } } 99 ] 100 } 101 } 102 ], 103 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 104 serverInfo: { 105 host: '<hostname>.mongodb.net', 106 port: 27017, 107 version: '8.2.0', 108 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 109 }, 110 serverParameters: { 111 ... 112 }, 113 command: { 114 aggregate: 'movies', 115 pipeline: [ 116 { 117 '$search': { 118 text: { 119 path: 'title', 120 query: 'yark', 121 fuzzy: { maxEdits: 1, maxExpansions: 100 } 122 } 123 } 124 } 125 ], 126 cursor: {}, 127 '$db': 'sample_mflix' 128 }, 129 ok: 1, 130 '$clusterTime': { 131 clusterTime: Timestamp({ t: 1758305729, i: 1 }), 132 signature: { 133 hash: Binary.createFromBase64('IUnIrXR/VeUrj1cGgyEFlkoQKAM=', 0), 134 keyId: Long('7551379485140975621') 135 } 136 }, 137 operationTime: Timestamp({ t: 1758305729, i: 1 }) 138 }
db.movies.explain("queryPlanner").aggregate([ { $search: { "text": { "path": "title", "query": "prince" }, "highlight": { "path": "title", "maxNumPassages": 1, "maxCharsToExamine": 40 } } }, { $project: { "description": 1, "_id": 0, "highlights": { "$meta": "searchHighlights" } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 text: { path: 'title', query: 'prince' }, 8 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 9 }, 10 explain: { 11 query: { 12 type: 'TermQuery', 13 args: { path: 'title', value: 'prince' } 14 }, 15 highlight: { resolvedHighlightPaths: [ '$type:string/title' ] }, 16 metadata: { 17 <hostname>.mongodb.netmongotVersion: '1.42.0', 18 mongotHostName: '<hostname>.mongodb.net', 19 indexName: 'default', 20 totalLuceneDocs: 21349 21 } 22 }, 23 requiresSearchMetaCursor: false 24 } 25 }, 26 { 27 '$_internalSearchIdLookup': { 28 subPipeline: [ 29 { '$match': { _id: { '$eq': '_id placeholder' } } } 30 ] 31 } 32 }, 33 { 34 '$project': { 35 description: true, 36 highlights: { '$meta': 'searchHighlights' }, 37 _id: false 38 } 39 } 40 ], 41 queryShapeHash: 'D08444272924C1E04A6E99D0CD4BF82FD929893862B3356F79EC18BBD1F0EF0C', 42 serverInfo: { 43 host: '<hostname>.mongodb.net', 44 port: 27017, 45 version: '8.2.0', 46 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 47 }, 48 serverParameters: { 49 ... 50 }, 51 command: { 52 aggregate: 'movies', 53 pipeline: [ 54 { 55 '$search': { 56 text: { path: 'title', query: 'prince' }, 57 highlight: { path: 'title', maxNumPassages: 1, maxCharsToExamine: 40 } 58 } 59 }, 60 { 61 '$project': { 62 description: 1, 63 _id: 0, 64 highlights: { '$meta': 'searchHighlights' } 65 } 66 } 67 ], 68 cursor: {}, 69 '$db': 'sample_mflix' 70 }, 71 ok: 1, 72 '$clusterTime': { 73 clusterTime: Timestamp({ t: 1758305809, i: 1 }), 74 signature: { 75 hash: Binary.createFromBase64('R7wN4/xS0eg0XFd23xeo/+hMPBY=', 0), 76 keyId: Long('7551379485140975621') 77 } 78 }, 79 operationTime: Timestamp({ t: 1758305809, i: 1 }) 80 }
db.movies.explain("queryPlanner").aggregate([ { "$searchMeta": { "facet": { "operator": { "near": { "path": "released", "origin": ISODate("1921-11-01T00:00:00.000+00:00"), "pivot": 7776000000 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" }, "yearFacet" : { "type" : "number", "path" : "year", "boundaries" : [1910,1920,1930,1940] } } } } } ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$searchMeta': { 6 mongotQuery: { 7 facet: { 8 operator: { 9 near: { 10 path: 'released', 11 origin: ISODate('1921-11-01T00:00:00.000Z'), 12 pivot: 7776000000 13 } 14 }, 15 facets: { 16 genresFacet: { type: 'string', path: 'genres' }, 17 yearFacet: { 18 type: 'number', 19 path: 'year', 20 boundaries: [ 1910, 1920, 1930, 1940 ] 21 } 22 } 23 } 24 }, 25 explain: { 26 query: { type: 'LongDistanceFeatureQuery', args: {} }, 27 collectStats: { 28 facet: { 29 stringFacetCardinalities: { genresFacet: { queried: 10, total: 25 } } 30 } 31 }, 32 metadata: { 33 <hostname>.mongodb.netmongotVersion: '1.42.0', 34 mongotHostName: '<hostname>.mongodb.net', 35 indexName: 'default', 36 totalLuceneDocs: 21349 37 } 38 }, 39 requiresSearchMetaCursor: true 40 } 41 } 42 ], 43 queryShapeHash: '582DB864C9BCFB96896CF1A3079CF70FAC10A9A1E19E8D66DF20A2BB40424FB5', 44 serverInfo: { 45 host: '<hostname>.mongodb.net', 46 port: 27017, 47 version: '8.2.0', 48 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 49 }, 50 serverParameters: { 51 ... 52 }, 53 command: { 54 aggregate: 'movies', 55 pipeline: [ 56 { 57 '$searchMeta': { 58 facet: { 59 operator: { 60 near: { 61 path: 'released', 62 origin: ISODate('1921-11-01T00:00:00.000Z'), 63 pivot: 7776000000 64 } 65 }, 66 facets: { 67 genresFacet: { type: 'string', path: 'genres' }, 68 yearFacet: { 69 type: 'number', 70 path: 'year', 71 boundaries: [ 1910, 1920, 1930, 1940 ] 72 } 73 } 74 } 75 } 76 } 77 ], 78 cursor: {}, 79 '$db': 'sample_mflix' 80 }, 81 ok: 1, 82 '$clusterTime': { 83 clusterTime: Timestamp({ t: 1758305859, i: 1 }), 84 signature: { 85 hash: Binary.createFromBase64('8Zm16MEkzHnPpP9uLJK1YlT7a3o=', 0), 86 keyId: Long('7551379485140975621') 87 } 88 }, 89 operationTime: Timestamp({ t: 1758305859, i: 1 }) 90 }
Para las consultas que especifiquen una etapa $limit en el pipeline, los resultados explain incluirán la métrica mongotDocsRequested, que muestra la cantidad de documentos que mongod solicitó desde mongot.
Ejemplo
{ "mongotQuery": {}, "explain": {}, "limit": <int>, "sortSpec": {}, "mongotDocsRequested": <int>, }
executionStats
El siguiente ejemplo utiliza el autocompletado para consultar el campo title con el executionStats modo nivel de verbosidad.
1 db.movies.explain("executionStats").aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "path": "title", 6 "query": "pre", 7 "fuzzy": { 8 "maxEdits": 1, 9 "prefixLength": 1, 10 "maxExpansions": 256 11 } 12 } 13 } 14 } 15 ])
1 { 2 explainVersion: '1', 3 stages: [ 4 { 5 '$_internalSearchMongotRemote': { 6 mongotQuery: { 7 autocomplete: { 8 path: 'title', 9 query: 'pre', 10 fuzzy: { maxEdits: 1, prefixLength: 1, maxExpansions: 256 } 11 } 12 }, 13 explain: { 14 query: { 15 type: 'BooleanQuery', 16 args: { 17 must: [ 18 { 19 type: 'MultiTermQueryConstantScoreBlendedWrapper', 20 args: { 21 queries: [ 22 { 23 type: 'DefaultQuery', 24 args: { queryType: 'AutomatonQuery' }, 25 stats: { 26 context: { millisElapsed: 0 }, 27 match: { millisElapsed: 0 }, 28 score: { millisElapsed: 0 } 29 } 30 } 31 ] 32 }, 33 stats: { 34 context: { 35 millisElapsed: 12.517877, 36 invocationCounts: { 37 createWeight: Long('4'), 38 createScorer: Long('48') 39 } 40 }, 41 match: { 42 millisElapsed: 0.970794, 43 invocationCounts: { nextDoc: Long('2436') } 44 }, 45 score: { 46 millisElapsed: 0.638731, 47 invocationCounts: { score: Long('2420') } 48 } 49 } 50 } 51 ], 52 mustNot: [], 53 should: [ 54 { 55 type: 'TermQuery', 56 args: { path: 'title', value: 'pre' }, 57 stats: { 58 context: { 59 millisElapsed: 1.481341, 60 invocationCounts: { 61 createWeight: Long('4'), 62 createScorer: Long('16') 63 } 64 }, 65 match: { millisElapsed: 0 }, 66 score: { millisElapsed: 0 } 67 } 68 } 69 ], 70 filter: [], 71 minimumShouldMatch: 0 72 }, 73 stats: { 74 context: { 75 millisElapsed: 15.118651, 76 invocationCounts: { createWeight: Long('4'), createScorer: Long('32') } 77 }, 78 match: { 79 millisElapsed: 1.923822, 80 invocationCounts: { nextDoc: Long('2436') } 81 }, 82 score: { 83 millisElapsed: 1.954216, 84 invocationCounts: { score: Long('2420') } 85 } 86 } 87 }, 88 collectStats: { 89 allCollectorStats: { 90 millisElapsed: 4.189904, 91 invocationCounts: { 92 collect: Long('2420'), 93 competitiveIterator: Long('16'), 94 setScorer: Long('16') 95 } 96 }, 97 facet: { collectorStats: { millisElapsed: 0 } } 98 }, 99 resultMaterialization: { 100 stats: { 101 millisElapsed: 21.876621, 102 invocationCounts: { retrieveAndSerialize: Long('4') } 103 } 104 }, 105 metadata: { 106 <hostname>.mongodb.netmongotVersion: '1.42.0', 107 mongotHostName: '<hostname>.mongodb.net', 108 indexName: 'default', 109 cursorOptions: { batchSize: 108, requiresSearchSequenceToken: false }, 110 totalLuceneDocs: 21349 111 }, 112 resourceUsage: { 113 majorFaults: Long('2'), 114 minorFaults: Long('242'), 115 userTimeMs: Long('40'), 116 systemTimeMs: Long('0'), 117 maxReportingThreads: 1, 118 numBatches: 4 119 } 120 }, 121 requiresSearchMetaCursor: false, 122 internalMongotBatchSizeHistory: [ Long('108'), Long('162'), Long('243'), Long('365') ] 123 }, 124 nReturned: Long('605'), 125 executionTimeMillisEstimate: Long('44') 126 }, 127 { 128 '$_internalSearchIdLookup': { 129 subPipeline: [ 130 { '$match': { _id: { '$eq': '_id placeholder' } } } 131 ], 132 totalDocsExamined: Long('605'), 133 totalKeysExamined: Long('605'), 134 numDocsFilteredByIdLookup: Long('0') 135 }, 136 nReturned: Long('605'), 137 executionTimeMillisEstimate: Long('91') 138 } 139 ], 140 queryShapeHash: '6FD3791F785FA329D4ECD1171E0E5AF6772C18F5F0A7A50FC416D080A93C8CB7', 141 serverInfo: { 142 host: '<hostname>.mongodb.net', 143 port: 27017, 144 version: '8.2.0', 145 gitVersion: '13e629eeccd63f00d17568fc4c12b7530fa34b54' 146 }, 147 serverParameters: { 148 ... 149 }, 150 command: { 151 aggregate: 'movies', 152 pipeline: [ 153 { 154 '$search': { 155 autocomplete: { 156 path: 'title', 157 query: 'pre', 158 fuzzy: { maxEdits: 1, prefixLength: 1, maxExpansions: 256 } 159 } 160 } 161 } 162 ], 163 cursor: {}, 164 '$db': 'sample_mflix' 165 }, 166 ok: 1, 167 '$clusterTime': { 168 clusterTime: Timestamp({ t: 1758306209, i: 1 }), 169 signature: { 170 hash: Binary.createFromBase64('MIipFR5NAfl728L6h4ueQeZBLGM=', 0), 171 keyId: Long('7551379485140975621') 172 } 173 }, 174 operationTime: Timestamp({ t: 1758306209, i: 1 }) 175 }
Para obtener más información sobre los elementos de respuesta de explain, consulta Explicar resultados.