Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$queryStats (etapa de agregación)

$queryStats

Advertencia

La etapa de agregación $queryStats no es compatible y no se garantiza que sea estable en una futura versión. MongoDB evoluciona activamente la organización de la salida $queryStats, por lo que la estructura y las rutas de campo en el documento de métricas pueden cambiar entre versiones. No compile funcionalidades que dependan de rutas de campo específicas de métricas. Si la $queryStats del esquema de salida cambia, actualiza el código de tu aplicación en consecuencia.

Devuelve estadísticas de tiempo de ejecución para los query registrados.

$queryStats recopila e informa métricas para aggregate()find() distinct() Consultas, y. $queryStats no recopila información para consultas que utilizan cifrado consultable.

La etapa $queryStats está habilitada en las implementaciones alojadas en MongoDB Atlas con un nivel de clúster de al menos M10.

Para ejecutar la etapa $queryStats, tu pipeline debe cumplir los siguientes requisitos:

  • El pipeline debe ejecutarse en la base de datos admin.

  • $queryStats debe ser la primera etapa en la pipeline.

db.adminCommand( {
aggregate: 1,
pipeline: [
{
$queryStats: {
transformIdentifiers: {
algorithm: <string>,
hmacKey: <binData> /* subtype 8 - used for sensitive data */
}
}
}
],
cursor: { }
} )

Importante

No se puede ejecutar $queryStats en una colección específica. Para ver ejemplos completos, consulta Ejemplos.

$queryStats requiere los siguientes campos:

Campo
Necesidad
Tipo
Descripción

transformIdentifiers

Opcional

Documento

Especifica opciones de transformación adicionales para la salida $queryStats.

transformIdentifiers
.algorithm

Obligatorio si se especifica el objeto transformIdentifiers

String

El tipo de transformación hash aplicada a la información del namespace y a los nombres de campos en la salida. El único valor de algorithm actualmente compatible es hmac-sha-256.

transformIdentifiers
.hmacKey

Obligatorio si se especifica el objeto transformIdentifiers

binData

La entrada de la clave privada en la transformación HMAC.

Si su implementación aplica control de acceso, el usuario que ejecuta $queryStats debe tener los siguientes permisos:

  • Para ejecutar $queryStats sin la transformIdentifiers opción, el usuario debe tener el privilegio de queryStatsRead acción.

  • Para ejecutar $queryStats con la opción transformIdentifiers, el usuario debe tener tanto el privilegio de queryStatsRead como el de queryStatsReadTransformed.

El rol integrado proporciona clusterMonitor los queryStatsRead queryStatsReadTransformed privilegios y. El siguiente ejemplo otorga el clusterMonitor rol en la admin base de datos:

db.grantRolesToUser(
"<user>",
[ { role: "clusterMonitor", db: "admin" } ]
)

Las siguientes secciones describen los detalles conductuales de la etapa $queryStats.

Las estadísticas para la etapa $queryStats se rastrean en una colección virtual almacenada en memoria. El límite de memoria para la colección virtual es del 1% de la memoria total del sistema.

$queryStats agrupa queries con propiedades comunes en el mismo documento de salida. El documento resultante se denomina entrada de estadísticas de query.

$queryStats agrupa consultas similares normalizando los valores de campo proporcionados por el usuario a sus tipos de datos. Por ejemplo, un filtro especificado como { item: 'card' } se normaliza a { item : '?string'}. $queryStats también normaliza los valores de algunas opciones de consulta como hint y comment.

$queryStats conserva valores literales para opciones como readConcern y readPreference.

Para obtener la lista completa de opciones incluidas en una entrada de estadísticas de consulta,consulte Buscar comando Forma de consulta.

Cuando se especifica una clave HMAC en la opción transformIdentifiers, $queryStats utiliza la clave HMAC para aplicar una función hash HMAC-SHA-256 sobre los siguientes datos:

  • Nombres de campos del documento

  • Nombres de las colecciones

  • Nombres de bases de datos

$queryStats no aplica la transformación HMAC a los siguientes datos:

  • Palabras clave de MQL, como los nombres de operadores (por ejemplo, $gte).

  • Nombres de parámetros como el parámetro partitionBy en $setWindowFields.

  • Valores de campo. $queryStats normaliza los valores de campo en una consulta a sus tipos de datos (como número o cadena) cuando se registra la consulta. $queryStats nunca almacena valores de campo que contengan datos del usuario.

Para un ejemplo de salida transformada, consulte Ejemplo Transformado.

MongoDB registra $queryStats operaciones en los registros de implementación. De forma predeterminada, MongoDB solo registra la invocación de $queryStats operaciones, no su salida. Para $queryStats las operaciones que incluyen la transformIdentifiers opción, puede especificar si la salida transformada se incluye en la entrada del registro.

Para aprender a controlar el comportamiento de registro de $queryStats, consulte Activar/desactivar la salida del registro $queryStats.

Las estadísticas de consulta de los flujos de cambio se actualizan cuando ocurre uno de estos eventos:

  • Se crea un cursor

  • Se getMore completa una operación

  • Un cursor se cierra

Las estadísticas de query reportadas para los flujos de cambios presentan estos comportamientos:

  • Las métricas de ejecución como totalExecMicros contienen información sobre la operación más reciente (creación de cursor, getMore o cierre de cursor).

  • Las operaciones internas getMore incrementan la métrica execCount.

  • firstResponseExecMicros y totalExecMicros son siempre iguales porque las estadísticas se recopilan y actualizan para cada operación getMore.

  • Cuando el cursor se cierra, lastExecutionMicros es 0.

$queryStats retorna un arreglo de entradas de estadísticas de query. Algunas propiedades de la entrada de estadísticas de consultas contienen valores literales, y algunas propiedades son estandarizadas para agrupar consultas comunes.

Las entradas de estadísticas de consulta contienen los siguientes documentos de nivel superior:

Documento
Descripción

key

La combinación única de atributos que definen una entrada en el resultado de las estadísticas de queries. El key contiene atributos como:

Cada combinación única de atributos crea una entrada separada en la colección virtual $queryStats.

asOf

La hora UTC en la que $queryStats leyó esta entrada de la colección virtual $queryStats. asOf no necesariamente devuelve la misma hora UTC para cada resultado. Internamente, la estructura de datos está particionada y cada partición se leerá en un momento específico.

metrics

Contiene métricas agregadas de tiempo de ejecución asociadas a cada entrada de estadísticas de query. Cada entrada de estadísticas de query registra estadísticas para cada query que comparte la misma clave.

Cada documento de la matriz de salida contiene los siguientes campos:

Campo
Tipo
Literal o normalizado
Descripción

key

Documento

Literal

Contiene la forma del query y atributos de query adicionales que agrupan un conjunto de queries

key.queryShape

Documento

Literal

Contiene atributos utilizados para agrupar juntos queries similares. Para obtener más información, consulta forma del query.

key.client

Documento

Literal

Describe la información del cliente asociada con la clave.

key.client.application

Documento

Literal

El nombre de la aplicación cliente

key.client.driver

Documento

Literal

Describe el driver utilizado para emitir la query

key.client.driver.name

String

Literal

Nombre del controlador utilizado para emitir la consulta. Los valores posibles son mongosh y nodejs.

key.client.driver.version

String

Literal

Número de versión del driver utilizado para emitir la query

key.client.os

Documento

Literal

Describe el sistema operativo utilizado por el cliente que emitió la consulta.

key.client.os.type

String

Literal

Tipo de sistema operativo

key.client.os.name

String

Literal

Nombre del sistema operativo

key.client.os.architecture

String

Literal

Arquitectura del sistema operativo. Los valores posibles incluyen arm64 y x86_64.

key.client.os.version

String

Literal

Número de versión del sistema operativo

key.readConcern

Documento

Literal

key.collectionType

String

Literal

El tipo de colección en la que se emitió la query. Para obtener más información, consulta Tipo de colección.

key.hint

Documento o cadena

Normalizado

El índice que se utilizó como sugerencia para la query

key.batchSize

String

Normalizado

El tamaño del lote para la clave. El tamaño de lote especifica el número máximo de documentos que se pueden devolver en cada lote de un resultado de query. Por defecto, el tamaño inicial del lote es el menor entre 101 documentos o 16 mebibytes (MiB) de documentos. Los lotes subsecuentes tienen un tamaño máximo de 16 MiB. batchSize puede aplicar un límite menor que 16 MiB, pero no uno mayor. Cuando se establece, el batchSize es el menor de batchSize documentos o 16 MiB en valor de documentos.

key.comment

String

Normalizado

Comentario asociado con la clave

key.maxTimeMS

String

Normalizado

Valor maxTimeMS asociado con la clave

key.noCursorTimeout

Booleano

Normalizado

noCursorTimeout opción asociada con la clave

key.readPreference

String

Literal

Preferencia de lectura Leer preferencia asociada a la clave

key.apiVersion

String

Literal

La versión de la Stable API asociada con la clave. Consulta API Estable.

key.apiStrict

Booleano

Literal

El valor del parámetro apiStrict asociado con la clave. Ver Stable API Parameters.

key.apiDeprecationErrors

Booleano

Literal

El valor del parámetro apiDeprecationErrors asociado con la clave. Ver Stable API Parameters.

keyHash

String

Literal

Una representación encriptada de los valores en el key. Cada valor único de keyHash corresponde a una entrada única en el almacén de memoria $queryStats.

queryShapeHash

String

Literal

Nuevo en la versión 8.0.

queryShapeHash es una string hexadecimal con el hash de una forma del query. Para más detalles, consulta Forma del query.

metrics

Documento

Literal

Describe estadísticas en tiempo de ejecución para la clave

metrics.lastExecutionMicros

Número largo

Literal

Tiempo de ejecución de la consulta más reciente para todas las consultas con la clave dada

metrics.execCount

Número largo

Literal

Número de veces que se ejecutaron consultas con la clave especificada

metrics.keysExamined

Documento

Literal

Describe el número de claves examinadas por las consultas

metrics
.keysExamined
.sum

entero

Literal

Número total de claves examinadas

metrics
.keysExamined
.max

Número largo

Literal

Número máximo de claves examinadas

metrics
.keysExamined
.min

Número largo

Literal

Menor número de claves examinadas

metrics
.keysExamined
.sumOfSquares

NumberDecimal

Literal

Suma de cuadrados del número de claves examinadas.

Un valor sumOfSquares alto indica una alta variación en la cantidad de claves examinadas en consultas individuales.

metrics.docsExamined

Documento

Literal

Describe el número de documentos examinados por queries

metrics
.docsExamined
.sum

entero

Literal

Número total de documentos examinados en la query

metrics
.docsExamined
.max

Número largo

Literal

Máximo número de documentos examinados

metrics
.docsExamined
.min

Número largo

Literal

Número mínimo de documentos examinados

metrics
.docsExamined
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados del número de documentos examinados.

Un valor alto sumOfSquares indica una alta variación en el número de documentos examinados en consultas individuales.

metrics.hasSortStage

Documento

Literal

Objeto que contiene dos campos: true y false. Cada campo cuenta el número de queries coincidentes donde el valor de hasSortStage es true o false, respectivamente.

hasSortStage es true cuando MongoDB debe ordenar los documentos después de recibirlos de un cursor.

metrics.usedDisk

Documento

Literal

Objeto que contiene dos campos: true y false. Cada campo cuenta el número de queries coincidentes donde el valor de usedDisk es true o false, respectivamente.

usedDisk es true cuando la query guarda datos en archivos temporales debido a restricciones de memoria.

metrics.fromMultiPlanner

Documento

Literal

Objeto que contiene dos campos: true y false. Cada campo cuenta el número de queries coincidentes donde el valor de fromMultiPlanner es true o false, respectivamente.

fromMultiPlanner es true cuando el planificador de consultas evalúa varios planes antes de elegir el plan de ejecución ganador para la query.

metrics.fromPlanCache

Documento

Literal

Objeto que contiene dos campos: true y false. Cada campo cuenta el número de queries coincidentes donde el valor de fromPlanCache es true o false, respectivamente.

fromPlanCache es true cuando el planificador de consultas puede usar un plan almacenado en la memoria caché de planes.

metrics.totalExecMicros

Documento

Literal

Describe el tiempo total invertido en ejecutar consultas con la clave dada. Si la query resultó en getMores, totalExecMicros incluye el tiempo dedicado al procesamiento de las getMore solicitudes. totalExecMicros no incluye el tiempo de espera para el cliente.

Todos los subcampos de totalExecMicros se informan en microsegundos.

metrics
.totalExecMicros
.sum

Número largo

Literal

Tiempo total dedicado a ejecutar consultas con la clave indicada

metrics
.totalExecMicros
.max

Número largo

Literal

La mayor cantidad de tiempo dedicado a ejecutar una query con la clave dada

metrics
.totalExecMicros
.min

Número largo

Literal

Menor cantidad de tiempo empleado en ejecutar una consulta con la clave dada

metrics
.totalExecMicros
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados de los tiempos totales de ejecución de todas las consultas con la clave dada. Un valor alto de sumOfSquares indica una alta varianza en los tiempos de ejecución de las consultas.

metrics
.firstResponseExecMicros

Documento

Literal

Describe el tiempo transcurrido desde que una query dentro de la clave comenzó a procesarse hasta que el servidor devuelve el primer lote de resultados

Todos los subcampos de firstResponseExecMicros se informan en microsegundos.

metrics
.firstResponseExecMicros
.sum

Número largo

Literal

Cantidad total de tiempo transcurrido desde el inicio del procesamiento de la query hasta que el servidor devuelve el primer lote de resultados

metrics
.firstResponseExecMicros
.max

Número largo

Literal

Mayor cantidad de tiempo transcurrido desde el inicio del procesamiento de la consulta hasta que el servidor devuelve el primer lote de resultados

metrics
.firstResponseExecMicros
.min

Número largo

Literal

El periodo más corto de tiempo transcurrido desde el inicio del procesamiento de consultas hasta que el servidor devuelve el primer lote de resultados

metrics
.firstResponseExecMicros
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados de las cantidades de tiempo transcurridas desde el inicio del procesamiento de la query hasta que el servidor devuelve el primer lote de resultados.

Un valor alto de sumOfSquares indica una alta varianza en los tiempos de procesamiento de query.

metrics.docsReturned

Documento

Literal

Describe el número de documentos devueltos por consultas dentro de la clave

metrics
.docsReturned
.sum

Número largo

Literal

Número total de documentos devueltos por consultas con la clave dada

metrics
.docsReturned
.max

Número largo

Literal

Número máximo de documentos devueltos por una query con la clave dada

metrics
.docsReturned
.min

Número largo

Literal

El menor número de documentos devueltos por una query con la clave proporcionada.

metrics
.docsReturned
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados del número de documentos devueltos por una consulta dentro de la clave.

Un valor elevado de sumOfSquares indica una gran variación en la cantidad de documentos devueltos entre las distintas consultas.

metrics.firstSeenTimestamp

fecha

Literal

Hora en la que una query con la clave dada se usó por primera vez desde el último reinicio

metrics.latestSeenTimestamp

fecha

Literal

Hora en que se utilizó por última vez una consulta con la clave dada

metrics.workingTimeMillis

Número largo

Literal

El tiempo de ejecución de la operación, sin contar pausas intencionales como el tiempo de espera por bloqueos y control de flujo.

metrics
.delinquentAcquisitions

Número largo

Literal

Número de veces que las operaciones de query exceden el tiempo esperado de adquisición de tickets de ejecución.

Nuevo en la versión 8.2.

metrics
.totalAcquisitionDelinquencyMillis

Número largo

Literal

Tiempo total en milisegundos que las operaciones de query excedieron el tiempo esperado de adquisición de tickets de ejecución.

Nuevo en la versión 8.2.

metrics
.maxAcquisitionDelinquencyMillis

Número largo

Literal

La duración más larga en milisegundos en la que una operación de query superó el tiempo esperado para la adquisición del ticket de ejecución.

Nuevo en la versión 8.2.

metrics
.cpuNanos

Documento

Literal

Contiene métricas relacionadas con el uso de la CPU para una operación de query. Este documento solo está disponible en sistemas Linux.

Nuevo en la versión 8.2.

metrics
.cpuNanos
.sum

Número largo

Literal

El tiempo total de CPU utilizado por una operación de query, en nanosegundos. Este campo solo está disponible en sistemas Linux.

Nuevo en la versión 8.2.

metrics
.cpuNanos
.max

Número largo

Literal

El tiempo máximo de CPU destinado a una query operación en nanosegundos. Este campo solo está disponible en sistemas Linux.

Nuevo en la versión 8.2.

metrics
.cpuNanos
.min

Número largo

Literal

El mínimo tiempo de CPU empleado en una operación de query en nanosegundos. Este campo solo está disponible en sistemas Linux.

Nuevo en la versión 8.2.

metrics
.cpuNanos
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados del tiempo de CPU dedicado a las operaciones de query. Este campo solo está disponible en sistemas Linux.

Un valor alto de sumOfSquares indica una alta variación en el tiempo de CPU para individual queries.

Nuevo en la versión 8.2.

El campo key.collectionType indica el tipo de colección en la que se emitió la query registrada. El collectionType puede tener uno de los siguientes valores:

Campo
Descripción

changeStream

La consulta fue una operación de flujo de cambio.

collection

La query se realizó en una colección estándar.

nonExistent

La query se emitió en una colección que no existe.

timeseries

La consulta se emitió en una colección de series temporales.

view

La consulta se emitió en una vista.

virtual

La consulta se emitió en una colección virtual. En estas colecciones virtuales se realizan las siguientes operaciones:

El key.queryShape documento contiene campos de forma de consulta. Para obtener más información sobre las formas de consulta, consulte Formas de consulta.

Los campos de key.queryShape varían según el comando que originó la entrada de estadísticas de la query. $queryStats crea entradas de estadísticas de query para los comandos aggregate, find, distinct y count.

Cada propiedad de forma de consulta corresponde a una opción de consulta. Por ejemplo, key.queryShape.sort corresponde a la sort() especificación para la forma de consulta.

La siguiente tabla describe las propiedades de forma de consulta para los comandos find.

Campo
Tipo
Literal o normalizado

key.queryShape.filter

Documento

Normalizado

key.queryShape.sort

Documento

Literal

key.queryShape.projection

Documento

Normalizado

key.queryShape.skip

entero

Normalizado

key.queryShape.limit

entero

Normalizado

key.queryShape.singleBatch

Booleano

Literal

key.queryShape.max

Documento

Normalizado

key.queryShape.min

Documento

Normalizado

key.queryShape.returnKey

Booleano

Literal

key.queryShape.showRecordId

Booleano

Literal

key.queryShape.tailable

Booleano

Literal

key.queryShape.oplogReplay

Booleano

Literal

key.queryShape.awaitData

Booleano

Literal

key.queryShape.collation

Documento

Literal

key.queryShape.allowDiskUse

Booleano

Literal

key.queryShape.let

Documento

Normalizado

La siguiente tabla describe las propiedades de forma de consulta para los comandos aggregate.

Campo
Tipo
Literal o normalizado

key.queryShape.pipeline

Arreglo

Normalizado

key.queryShape.explain

Booleano

Literal

key.queryShape.allowDiskUse

Booleano

Literal

key.queryShape.collation

Documento

Literal

key.queryShape.hint

string o documento

Normalizado

key.queryShape.let

Documento

Normalizado

La siguiente tabla describe las propiedades de forma de consulta para los comandos distinct.

Campo
Tipo
Literal o normalizado

key.queryShape.collation

Documento

Normalizado

key.queryShape.key

String

Literal

key.queryShape.query

Documento

Normalizado

La siguiente tabla describe las propiedades de forma de consulta para los comandos count.

Campo
Tipo
Literal o normalizado

key.queryShape.collation

Documento

Normalizado

key.queryShape.query

Documento

Normalizado

key.queryShape.limit

entero

Normalizado

key.queryShape.skip

entero

Normalizado

Las entradas de estadísticas de consultas pueden contener un documento metrics.supplementalMetrics que proporciona información adicional sobre sus consultas.

Si la forma de su consulta $vectorSearch contiene, $queryStats genera las siguientes métricas complementarias:

Campo
Tipo
Descripción
metrics
.supplementalMetrics
.vectorSearch

Documento

Métricas complementarias sobre una etapa de agregación $vectorSearch

metrics
.supplementalMetrics
.vectorSearch
.limit

Documento

Métricas relacionadas con el valor limit de la etapa de agregación $vectorSearch

metrics
.supplementalMetrics
.vectorSearch
.numCandidatesLimitRatio

Documento

Métricas relacionadas con el valor numCandidates de la etapa de agregación $vectorSearch. $queryStats expresa estas métricas como una proporción de numCandidates dividido por el valor de limit.

Para ejecutar los ejemplos de esta sección, comienza con los siguientes datos:

db.products.insertMany(
[
{ item: "card", qty: 15 },
{ item: "envelope", qty: 20 },
{ item: "stamps" , qty: 30 }
]
)

Luego, ejecuta estos comandos:

db.products.find( { item: "card" } )
db.products.aggregate( [
{
$match: { qty: { $gt: 20 } }
}
] )

Los siguientes ejemplos muestran la salida de $queryStats utilizando diferentes tipos de transformación de datos:

La salida $queryStats de ejemplo en las siguientes secciones puede variar según la ejecución de otros comandos.

Aporte:

db.getSiblingDB("admin").aggregate( [
{
$queryStats: { }
}
] )

Salida:

[
{
key: {
queryShape: {
cmdNs: { db: 'test', coll: 'products' },
command: 'find',
filter: { item: { '$eq': '?string' } }
},
client: {
driver: { name: 'nodejs|mongosh', version: '5.1.0' },
os: {
type: 'Darwin',
name: 'darwin',
architecture: 'arm64',
version: '22.6.0'
},
platform: 'Node.js v16.19.1, LE (unified)',
version: '5.1.0|1.8.0',
application: { name: 'mongosh 1.8.0' }
},
collectionType: 'collection'
},
keyHash: 'dsoJ+LHAru0z6MJ1/IygJnnLTrlpVYYmPnlmNZbZrLI=',
queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48",
metrics: {
lastExecutionMicros: Long("4254"),
execCount: Long("1"),
totalExecMicros: {
sum: Long("4254"),
max: Long("4254"),
min: Long("4254"),
sumOfSquares: Decimal128("18096516")
},
firstResponseExecMicros: {
sum: Long("4254"),
max: Long("4254"),
min: Long("4254"),
sumOfSquares: Decimal128("18096516")
},
docsReturned: {
sum: Long("1"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Decimal128("1")
},
firstSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z"),
latestSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z")
},
asOf: Timestamp({ t: 1694695007, i: 0 })
},
{
key: {
queryShape: {
cmdNs: { db: 'test', coll: 'products' },
command: 'aggregate',
pipeline: [
{ '$match': { qty: { '$gt': '?number' } } }
]
},
apiVersion: '1',
client: {
driver: { name: 'nodejs|mongosh', version: '5.1.0' },
os: {
type: 'Darwin',
name: 'darwin',
architecture: 'arm64',
version: '22.6.0'
},
platform: 'Node.js v16.19.1, LE (unified)',
version: '5.1.0|1.8.0',
application: { name: 'mongosh 1.8.0' }
},
collectionType: 'collection',
cursor: { batchSize: '?number' }
},
keyHash: '2QLBfL0m1lliStdN4XvBjqVBtZQ6ffaB2L1pJ99twT8=',
queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48",
metrics: {
lastExecutionMicros: Long("350"),
execCount: Long("3"),
totalExecMicros: {
sum: Long("3084"),
max: Long("2499"),
min: Long("235"),
sumOfSquares: Decimal128("6422726")
},
firstResponseExecMicros: {
sum: Long("3084"),
max: Long("2499"),
min: Long("235"),
sumOfSquares: Decimal128("6422726")
},
docsReturned: {
sum: Long("3"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Decimal128("3")
},
firstSeenTimestamp: ISODate("2023-11-29T21:16:17.796Z"),
latestSeenTimestamp: ISODate("2023-11-29T21:17:12.385Z")
},
asOf: Timestamp({ t: 1701292827, i: 0 })
}
]

Aporte:

db.getSiblingDB("admin").aggregate( [
{
$queryStats: {
transformIdentifiers: {
algorithm: "hmac-sha-256" ,
hmacKey: BinData(8, "87c4082f169d3fef0eef34dc8e23458cbb457c3sf3n2")
}
}
}
] )

Salida:

[
{
key: {
queryShape: {
cmdNs: {
db: 'Mtrt3iG7dsX5c5uCSIhSVlcu5qD3u3xx2EQnS1dJLxM=',
coll: '3oJE6AyOuf8h5NqWiXETxulFlPm3QUXbMnMjL2EqAU4='
},
command: 'find',
filter: {
'VWVRow7Ure92ajRPfrpWiU8OtDeWcLePFIq0+tooBng=': { '$eq': '?string' }
}
},
client: {
driver: { name: 'nodejs|mongosh', version: '5.1.0' },
os: {
type: 'Darwin',
name: 'darwin',
architecture: 'arm64',
version: '22.6.0'
},
platform: 'Node.js v16.19.1, LE (unified)',
version: '5.1.0|1.8.0',
application: { name: 'mongosh 1.8.0' }
},
collectionType: 'collection'
},
keyHash: 'q4vxam+wbk8tTrl8D0MDFH1LQAbI8fWspfkGKhEUROk=',
queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48",
metrics: {
lastExecutionMicros: Long("4254"),
execCount: Long("1"),
keysExamined: {
sum: Int("5"),
max: Long("5"),
min: Long("5"),
sumOfSquares: Decimal128("25")
},
docsExamined: {
sum: Long("1"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Decimal128("1")
},
hasSortStage: {true: Long("0"), false: Long("1")},
usedDisk: {true: Long("0"), false: Long("1")},
fromMultiPlanner: {true: Long("0"), false: Long("1")},
fromPlanCache: {true: Long("1"), false: Long("0")},
totalExecMicros: {
sum: Long("4254"),
max: Long("4254"),
min: Long("4254"),
sumOfSquares: Decimal128("18096516")
},
firstResponseExecMicros: {
sum: Long("4254"),
max: Long("4254"),
min: Long("4254"),
sumOfSquares: Decimal128("18096516")
},
docsReturned: {
sum: Long("1"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Decimal128("1")
},
firstSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z"),
latestSeenTimestamp: ISODate("2023-09-14T12:30:27.989Z")
},
asOf: Timestamp({ t: 1694695712, i: 0 })
},
{
key: {
queryShape: {
cmdNs: {
db: 'Mtrt3iG7dsX5c5uCSIhSVlcu5qD3u3xx2EQnS1dJLxM=',
coll: '3oJE6AyOuf8h5NqWiXETxulFlPm3QUXbMnMjL2EqAU4='
},
command: 'aggregate',
pipeline: [
{
'$match': {
'RVqrwNEPotzdKnma/T7s4YcgNvpqO29BMDoni2N4IMI=': { '$gt': '?number' }
}
}
]
},
apiVersion: '1',
client: {
driver: { name: 'nodejs|mongosh', version: '5.1.0' },
os: {
type: 'Darwin',
name: 'darwin',
architecture: 'arm64',
version: '22.6.0'
},
platform: 'Node.js v16.19.1, LE (unified)',
version: '5.1.0|1.8.0',
application: { name: 'mongosh 1.8.0' }
},
collectionType: 'collection',
cursor: { batchSize: '?number' }
},
keyHash: 'HEhpQTYB+/wVoHLkOkMd+EC2jguQlMJ1N/vTE7+b8Js=',
queryShapeHash: "uxMLCvpiJ5N/IRqt4c28/0A8F01C8AA16CA805FF5C1A5737535F97E40C2A90CE91A82CCB7A74C7CCB9C48",
metrics: {
lastExecutionMicros: Long("350"),
execCount: Long("3"),
keysExamined: {
sum: Int("5"),
max: Long("5"),
min: Long("5"),
sumOfSquares: Decimal128("25")
},
docsExamined: {
sum: Long("1"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Decimal128("1")
},
hasSortStage: {true: Long("0"), false: Long("1")},
usedDisk: {true: Long("0"), false: Long("1")},
fromMultiPlanner: {true: Long("0"), false: Long("1")},
fromPlanCache: {true: Long("1"), false: Long("0")},
totalExecMicros: {
sum: Long("3084"),
max: Long("2499"),
min: Long("235"),
sumOfSquares: Decimal128("6422726")
},
firstResponseExecMicros: {
sum: Long("3084"),
max: Long("2499"),
min: Long("235"),
sumOfSquares: Decimal128("6422726")
},
docsReturned: {
sum: Long("3"),
max: Long("1"),
min: Long("1"),
sumOfSquares: Decimal128("3")
},
firstSeenTimestamp: ISODate("2023-11-29T21:16:17.796Z"),
latestSeenTimestamp: ISODate("2023-11-29T21:17:12.385Z")
},
asOf: Timestamp({ t: 1701293302, i: 0 })
},
]

Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $queryStats a una canalización de agregación, utilice el Operador $queryStats en un objeto de canalización.

El siguiente ejemplo crea una etapa de canalización que genera estadísticas de tiempo de ejecución sin transformar sobre las consultas registradas. A continuación, ejecuta la canalización de agregación:

const pipeline = [{ $queryStats: {} }];
const adminDb = client.db("admin");
const cursor = adminDb.aggregate(pipeline);
return cursor;

Para devolver estadísticas de consultas transformadas, incluya el campo transformIdentifiers en la etapa de la pipeline:

const pipeline = [
{
$queryStats: {
transformIdentifiers: {
algorithm: "hmac-sha-256",
hmacKey: new Binary(Buffer.from("87c4082f169d3fef0eef34dc8e23458cbb457c3aabbccddeeff00112233445566778899", "hex"), 8)
}
}
}
];
const adminDb = client.db("admin");
const cursor = adminDb.aggregate(pipeline);
return cursor;

MongoDB Atlas utiliza periódicamente $queryStats para recopilar datos anónimos sobre tus queries, lo que ayuda a mejorar los productos de MongoDB. Tus datos también pueden utilizarse para hacer sugerencias de funcionalidades en función del uso. MongoDB retiene los datos que recopila con $queryStats durante cuatro años.

Cuando Atlas ejecuta $queryStats en tu implementación, utiliza una clave HMAC única por organización de Atlas para transformar tus datos y evitar recopilar información sensible.

Volver

$querySettings