Definición
Advertencia
La etapa de agregación $queryStats no es compatible y no se garantiza que sea estable en una futura versión. No cree funcionalidades que dependan de un formato de salida específico de esta etapa, ya que la salida puede cambiar en una versión futura.
Devuelve estadísticas de tiempo de ejecución para los query registrados.
$queryStats recopila e informa métricas para
Consultas aggregate(), find() y distinct() . $queryStats no recopila información para aquellas búsquedas que usan Queryable Encryption.
Requisitos
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.$queryStatsdebe ser la primera etapa en la pipeline.
Sintaxis
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.
Campos de comandos
$queryStats requiere los siguientes campos:
Campo | Necesidad | Tipo | Descripción |
|---|---|---|---|
| Opcional | Documento | Especifica opciones de transformación adicionales para la salida |
transformIdentifiers.algorithm | Obligatorio si se especifica el objeto | 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 |
transformIdentifiers.hmacKey | Obligatorio si se especifica el objeto | binData | La entrada de la clave privada en la transformación HMAC. |
Control de acceso
Si tu implementación aplica el control de acceso, el usuario que ejecuta $queryStats debe tener los siguientes permisos:
Para ejecutar
$queryStatssin la opcióntransformIdentifiers, el usuario debe tener la acción de privilegioqueryStatsRead.Para ejecutar
$queryStatscon la opcióntransformIdentifiers, el usuario debe tener tanto el privilegio dequeryStatsReadcomo el dequeryStatsReadTransformed.
El rol clusterMonitor integrado proporciona los privilegios queryStatsRead y queryStatsReadTransformed. El siguiente ejemplo otorga el rol clusterMonitor en la base de datos admin:
db.grantRolesToUser( "<user>", [ { role: "clusterMonitor", db: "admin" } ] )
Comportamiento
Las siguientes secciones describen los detalles conductuales de la etapa $queryStats.
Cómo $queryStats rastrea las estadísticas de consultas
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.
Cómo $queryStats agrupa documentos devueltos
$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 query, consulte find Command forma del query.
Cómo $queryStats transforma los datos mediante transformIdentifiers
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
partitionByen$setWindowFields.Valores de campo.
$queryStatsnormaliza los valores de campo en una consulta a sus tipos de datos (como número o string) cuando se registra la consulta.$queryStatsnunca almacena valores de campos que contengan datos de usuario.
Para un ejemplo de salida transformada, consulte Ejemplo Transformado.
$queryStats Log Entries
MongoDB registra $queryStats operaciones en los registros de implementación. Por defecto, MongoDB sólo registra la invocación de las operaciones $queryStats, no los resultados de la operación. Para las operaciones $queryStats que incluyen la opción transformIdentifiers, puedes especificar si la salida transformada se incluye en la entrada de registro.
Para aprender a controlar el comportamiento de registro de $queryStats, consulte Activar/desactivar la salida del registro $queryStats.
Flujos de cambio
Las estadísticas de query para change streams se actualizan cuando se produce uno de los siguientes eventos:
Se crea un cursor
Se completa una operación
getMoreUn cursor se cierra
Las estadísticas de query reportadas para los flujos de cambios presentan estos comportamientos:
Las métricas de ejecución como
totalExecMicroscontienen información sobre la operación más reciente (creación de cursor,getMoreo cierre de cursor).Las operaciones internas
getMoreincrementan la métricaexecCount.firstResponseExecMicrosytotalExecMicrossiempre son iguales porque las estadísticas se recopilan y actualizan para cada operación degetMore.Cuando el cursor se cierra,
lastExecutionMicroses 0.
Comportamiento del clúster particionado
Nuevo en la versión 8.3.
En clústeres compartimentados, MongoDB registra estadísticas de query por separado en cada mongod y mongos cuando $queryStats está habilitado. Los servidores partición también registran estadísticas para las queries que se originan en mongos. Estos ofrecen métricas más completas a nivel de partición para las consultas que los usuarios enrutan a través de mongos.
Salida
$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 query contienen los siguientes documentos de nivel superior:
Documento | Descripción |
|---|---|
| La combinación única de atributos que definen una entrada en el resultado de las estadísticas de queries. El
Cada combinación única de atributos crea una entrada separada en la colección virtual |
| La hora UTC en que |
| 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 en el arreglo de salida contiene los siguientes campos:
Campo | Tipo | Literal o normalizado | Descripción |
|---|---|---|---|
| Documento | literal | Contiene la forma del query y atributos de query adicionales que agrupan un conjunto de queries |
| Documento | literal | Contiene atributos utilizados para agrupar juntos queries similares. Para obtener más información, consulta forma del query. |
| Documento | literal | Describe la información del cliente asociada con la clave. |
| Documento | literal | El nombre de la aplicación del cliente |
| Documento | literal | Describe el driver utilizado para emitir la query |
| String | literal | Nombre del driver utilizado para emitir la query. Los valores posibles incluyen |
| String | literal | Número de versión del driver utilizado para emitir la query |
| Documento | literal | Describe el sistema operativo que utiliza el cliente que emitió la query |
| String | literal | Tipo de sistema operativo |
| String | literal | Nombre del sistema operativo |
| String | literal | Arquitectura del sistema operativo. Los valores posibles incluyen |
| String | literal | Número de versión del sistema operativo |
| Documento | literal | The nivel de consistencia de lectura para la clave |
| 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. |
| Documento o string | Normalizado | El índice que se utilizó como sugerencia para la query |
| 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 |
| String | Normalizado | Comentario asociado con la clave |
| String | Normalizado | Valor maxTimeMS asociado con la clave |
| Booleano | Normalizado | noCursorTimeout opción asociada con la clave |
| String | literal | Preferencia de lectura Leer preferencia asociada a la clave |
| String | literal | La versión de la Stable API asociada con la clave. Consulta API Estable. |
| Booleano | literal | El valor del parámetro |
| Booleano | literal | El valor del parámetro |
| String | literal | Una representación encriptada de los valores en el |
| String | literal | Nuevo en la versión 8.0.
|
| Documento | literal | Describe estadísticas en tiempo de ejecución para la clave |
| NumberLong | literal | Tiempo de ejecución de la consulta más reciente para todas las consultas con la clave dada |
| NumberLong | literal | Número de veces que se ejecutaron consultas con la clave especificada |
| 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 | NumberLong | literal | Número máximo de claves examinadas |
metrics.keysExamined.min | NumberLong | literal | Menor número de claves examinadas |
metrics.keysExamined.sumOfSquares | NumberDecimal | literal | Suma de los cuadrados del número de claves examinadas. Un valor alto de |
| 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 | NumberLong | literal | Máximo número de documentos examinados |
metrics.docsExamined.min | NumberLong | 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 de |
| Documento | literal | Objeto que contiene dos campos:
|
| Documento | literal | Objeto que contiene dos campos:
|
| Documento | literal | Objeto que contiene dos campos:
|
| Documento | literal | Objeto que contiene dos campos:
|
| Documento | literal | Describe el tiempo total invertido en ejecutar consultas con la clave dada. Si la query resultó en Todos los subcampos de |
metrics.totalExecMicros.sum | NumberLong | literal | Tiempo total dedicado a ejecutar consultas con la clave indicada |
metrics.totalExecMicros.max | NumberLong | literal | La mayor cantidad de tiempo dedicado a ejecutar una query con la clave dada |
metrics.totalExecMicros.min | NumberLong | literal | La menor cantidad de tiempo invertido en ejecutar una query con la clave dada |
metrics.totalExecMicros.sumOfSquares | NumberDecimal | literal | Suma de los cuadrados de los tiempos de ejecución totales para todas las consultas con la clave dada. Un valor alto de |
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 |
metrics.firstResponseExecMicros.sum | NumberLong | 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 | NumberLong | literal | Cantidad total de tiempo desde el inicio del procesamiento de query hasta que el servidor devuelve el primer agrupar de resultados |
metrics.firstResponseExecMicros.min | NumberLong | 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 |
| Documento | literal | Describe el número de documentos devueltos por consultas dentro de la clave |
metrics.docsReturned.sum | NumberLong | literal | Número total de documentos devueltos por las consultas con la clave dada |
metrics.docsReturned.max | NumberLong | literal | Número máximo de documentos devueltos por una query con la clave dada |
metrics.docsReturned.min | NumberLong | 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 query dentro de la clave. Un valor elevado de |
| fecha | literal | Hora en la que una query con la clave dada se usó por primera vez desde el último reinicio |
| fecha | literal | Hora en que se realizó más recientemente una query con la clave proporcionada |
| NumberLong | 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 | NumberLong | 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 | NumberLong | 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 | NumberLong | 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 | NumberLong | 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 | NumberLong | 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 | NumberLong | 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 Nuevo en la versión 8.2. |
metrics.numInterruptChecksPerSec | NumberLong | literal | Número de veces que una operación de query llama a Nuevo en la versión 8.3. |
metrics.overdueInterruptApproxMaxMillis | NumberLong | literal | Número máximo de milisegundos que el sistema retrasó Nuevo en la versión 8.3. |
Tipo de colección
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 |
|---|---|
| La query era una operación de flujo de cambios. |
| La query se realizó en una colección estándar. |
| La query se emitió en una colección que no existe. |
| La query se emitió en una colección de series temporales. |
| La query se emitió en una vista. |
| La query se ejecutó en una colección virtual. Las siguientes operaciones ocurren en colecciones virtuales: |
forma de la query
El documento key.queryShape contiene campos de forma del query. Para aprender sobre formas del query, consulte Formas del query.
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 forma del query propiedad corresponde a una opción de query. Por ejemplo, key.queryShape.sort corresponde a la sort() especificación para la forma del query.
encontrar la forma del query de Comando
La siguiente tabla describe las propiedades de la forma del query para los comandos find.
Campo | Tipo | Literal o normalizado |
|---|---|---|
| Documento | Normalizado |
| Documento | literal |
| Documento | Normalizado |
| entero | Normalizado |
| entero | Normalizado |
| Booleano | literal |
| Documento | Normalizado |
| Documento | Normalizado |
| Booleano | literal |
| Booleano | literal |
| Booleano | literal |
| Booleano | literal |
| Booleano | literal |
| Documento | literal |
| Booleano | literal |
| Documento | Normalizado |
comando agregado forma del query
La siguiente tabla describe las propiedades de la forma del query para los comandos aggregate.
Campo | Tipo | Literal o normalizado |
|---|---|---|
| Arreglo | Normalizado |
| Booleano | literal |
| Booleano | literal |
| Documento | literal |
| string o documento | Normalizado |
| Documento | Normalizado |
Forma distinta de Comando forma del query
La siguiente tabla describe las propiedades de la forma del query para los comandos distinct.
Campo | Tipo | Literal o normalizado |
|---|---|---|
| Documento | Normalizado |
| String | literal |
| Documento | Normalizado |
count Command forma del query
La siguiente tabla describe las propiedades de la forma del query para los comandos count.
Campo | Tipo | Literal o normalizado |
|---|---|---|
| Documento | Normalizado |
| Documento | Normalizado |
| entero | Normalizado |
| entero | Normalizado |
Métricas Suplementarias
Los registros de estadísticas de query pueden contener un metrics.supplementalMetrics documento que proporciona información adicional sobre sus query.
Métricas de $vectorSearch
Si la forma del query contiene $vectorSearch, $queryStats proporciona las siguientes métricas suplementarias:
Campo | Tipo | Descripción |
|---|---|---|
metrics.supplementalMetrics.vectorSearch | Documento | Métricas complementarias sobre una etapa de agregación |
metrics.supplementalMetrics.vectorSearch.limit | Documento | Métricas relacionadas con el valor |
metrics.supplementalMetrics.vectorSearch.numCandidatesLimitRatio | Documento | Métricas relacionadas con el valor |
Ejemplos
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.
Ejemplo no transformado
Entrada:
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 }) } ]
Ejemplo Transformado
Entrada:
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.
Ejemplo no transformado
El siguiente ejemplo crea una etapa de pipeline que produce estadísticas de tiempo de ejecución no transformadas sobre las queries registradas. El ejemplo luego ejecuta la pipeline de agregación:
const pipeline = [{ $queryStats: {} }]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;
Ejemplo Transformado
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;
Colección de datos de MongoDB Atlas
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.