La consulta de búsqueda de MongoDB 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
Visualizar planes de consulta en el área de juegos
Genere y vea resúmenes de planes explain con la Patio de juegos de búsqueda Atlas.
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 de consulta, incluidos los campos | |
queryPlanner (predeterminado) | 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 consulta. 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 consulta al ejecutarse. Esto no se devuelve en el modo de verbosidad |
collectors
El documento collectors BSON contiene los siguientes campos:
Campo | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Requerido | Estadísticas de todos los recopiladores de la consulta. Las estadísticas reportadas representan el valor máximo de todos los recopiladores utilizados en la consulta o la suma de las estadísticas de todos los subrecopiladores. Las estadísticas de tiempo se suman para reflejar el tiempo total empleado en todos los recopiladores durante toda la consulta. Para obtener más información, |
| Documento | Opcional | |
| Documento | Opcional |
allCollectorStats
El allCollectorStats documento BSON describe las estadísticas de todos los recopiladores especificados en la consulta, incluidos facet sorty. Contiene las siguientes claves:
Campo | Descripción |
|---|---|
| Realiza un seguimiento de la duración y el número de resultados recopilados por el recopilador. |
| Estadísticas que rastrean la duración total y la cantidad 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 consulta y ejecución al especificar una faceta en la consulta. Contiene los siguientes campos:
Opción | Tipo | Necesidad | Propósito |
|---|---|---|---|
| Documento | Opcional | Muestra estadísticas solo para el recopilador |
| 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 | Registra las estadísticas relacionadas con la ejecución de
|
| 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 host |
| String | Opcional | Índice de MongoDB Search utilizado en la query. |
| Documento | Opcional | Opciones de cursor otorgadas a |
| entero | Opcional | Número total de objetos de índice en el índice, incluidos los documentos eliminados. |
query
El query documento BSON describe las estadísticas de ejecución de la consulta. 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 búsqueda MongoDB utilizado con la consulta. |
| 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 consulta ejecutada con ese comando. La respuesta en el args campo incluye detalles estructurados de las consultas que Lucene realizó a MongoDB Search para satisfacer una $search consulta.
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
Los ejemplos en esta sección se basan en consultas ejecutadas contra los conjuntos de datos de muestra con el nivel de verbosidad queryPlanner. En la respuesta de ejemplo, los:
mongotQueryEl campo muestra el operador de MongoDB Search y la query que se ejecutó.explain.typeEl campo muestra la consulta de Lucene que creó el operador.
Para ver ejemplos completos, consulte 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 deben 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 del
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 las consultas de Lucene
FunctionScoreQuery, 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,
LongDistanceFeatureQueryla respuesta contiene solostatsun.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
Cadena 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 consultas de Lucene que no están definidas explícitamente por otra consulta de Lucene se serializan mediante la consulta predeterminada. El resumen estructurado incluye detalles sobre la siguiente opción:
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 explain respuesta para los modos de verbosidad executionStats y allPlansExecution incluye un stats campo que contiene información sobre cuánto tiempo pasa una consulta en varias etapas de ejecución de la consulta.
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 necesario para determinar cuál documento es la siguiente coincidencia. El tiempo dedicado a la coincidencia de resultados puede variar significativamente según la naturaleza de la consulta. Hay dos tareas cuyos recuentos de invocación se enumeran en esta área:
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 que mongot tarda en lograr lo siguiente:
Recupere datos de resultados almacenados en Lucene en formato
_idostoredSource.Serialice los datos en formato BSON antes de enviarlos
mongoda.
Para obtener más información,stats consulte.
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 errores de página importantes que ocurren cuando el sistema no puede encontrar los datos necesarios en la memoria, lo que da como resultado la lectura desde el almacenamiento de respaldo, como el disco, durante la ejecución de la consulta. |
| 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, empleado en el espacio del 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
Si ya has cargado el conjunto de datos de muestra, consulta el tutorial MongoDB Search Quick Start para crear una definición de índice y ejecutar consultas MongoDB Search.
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 explain elementos de respuesta, consulte Explicar resultados.