Docs Menu
Docs Home
/ /

$queryStats (etapa de agregación)

$queryStats

Advertencia

La etapa de agregación $queryStats no es compatible y no se garantiza su estabilidad en futuras versiones. No cree funcionalidades que dependan de un formato de salida específico de esta etapa, ya que este podría cambiar en futuras versiones.

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 menos10 M.

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

  • La canalización debe ejecutarse en la base de datos admin.

  • $queryStats Debe ser la primera etapa del proceso.

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, consulte Ejemplos.

$queryStats toma 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 espacio de nombres y a los nombres de campo en la salida. El único valor algorithm admitido actualmente es hmac-sha-256.

transformIdentifiers
.hmacKey

Obligatorio si se especifica el objeto transformIdentifiers

binData

La entrada de 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 transformIdentifiers opción, el usuario debe tener las acciones de privilegio queryStatsRead queryStatsReadTransformed y.

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 detalles de comportamiento de la etapa $queryStats.

Las estadísticas de la etapa $queryStats se registran en una colección virtual almacenada en memoria. El límite de memoria de 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 los campos proporcionados por el usuario según 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 en los siguientes datos:

  • Nombres de campos del documento

  • Nombres de colecciones

  • Nombres de bases de datos

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

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

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

  • 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 ver 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 $queryStats comportamiento del registro de, consulte Alternar la salida del registro de $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 consultas informadas para los flujos de cambio tienen 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 Devuelve una matriz de entradas de estadísticas de consulta. Algunas propiedades de estas entradas contienen valores literales y otras están normalizadas 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 define una entrada en la salida de las estadísticas de la consulta. El atributo key contiene atributos como:

Cada combinación única de atributos crea una entrada independiente 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 de tiempo de ejecución agregadas asociadas a cada entrada de estadísticas de consulta. Cada entrada registra las estadísticas de cada consulta 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 que se utilizan para agrupar consultas similares. Para más información, consulte Forma de consulta.

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 controlador utilizado para emitir la consulta.

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 controlador utilizado para emitir la consulta

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 son arm64 y x86_64.

key.client.os.version

String

Literal

Número de versión del sistema operativo

key.readConcern

Documento

Literal

La preocupación de la lectura por la clave

key.collectionType

String

Literal

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

key.hint

Documento o cadena

Normalizado

El índice que se utilizó como pista para la consulta

key.batchSize

String

Normalizado

El tamaño del lote de la clave. El tamaño del lote especifica el número máximo de documentos que se pueden devolver en cada lote del resultado de una consulta. De forma predeterminada, el tamaño del lote inicial es el menor de 101 documentos o 16 mebibytes (MiB) de documentos. Los lotes posteriores tienen un tamaño máximo de 16 MiB. batchSize puede imponer un límite menor que 16 MiB, pero no mayor. Cuando se establece,batchSize es el menor de batchSize documentos o 16 MiB de documentos.

key.comment

String

Normalizado

Comentario asociado a la clave

key.maxTimeMS

String

Normalizado

key.noCursorTimeout

Booleano

Normalizado

key.readPreference

String

Literal

Preferencia de lectura 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 apiStrict valor del parámetro asociado a la clave.Consulte Parámetros de API estables.

key.apiDeprecationErrors

Booleano

Literal

El apiDeprecationErrors valor del parámetro asociado a la clave.Consulte Parámetros de API estables.

keyHash

String

Literal

Representación hash de los valores en 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 cadena hexadecimal con el hash de una forma de consulta. Para más detalles, consulte Formas de consulta.

metrics

Documento

Literal

Describe las estadísticas de 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 han ejecutado consultas con la clave dada

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 llaves 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 consultas

metrics
.docsExamined
.sum

entero

Literal

Número total de documentos examinados en la consulta

metrics
.docsExamined
.max

Número largo

Literal

Número máximo de documentos examinados

metrics
.docsExamined
.min

Número largo

Literal

Número mínimo de documentos examinados

metrics
.docsExamined
.sumOfSquares

NumberDecimal

Literal

Suma de 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 consultas 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 consultas coincidentes donde el valor de usedDisk es true o false, respectivamente.

usedDisk es true cuando la consulta escribe 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 consultas coincidentes donde el valor de fromMultiPlanner es true o false, respectivamente.

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

metrics.fromPlanCache

Documento

Literal

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

fromPlanCache es true cuando el planificador de consultas puede usar un plan del caché de planes.

metrics.totalExecMicros

Documento

Literal

Describe el tiempo total empleado en ejecutar consultas con la clave dada. Si la consulta getMores generó, totalExecMicros incluye el tiempo empleado en procesar las getMore solicitudes. totalExecMicros no incluye el tiempo de espera del 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 dada

metrics
.totalExecMicros
.max

Número largo

Literal

Mayor cantidad de tiempo empleado en ejecutar una consulta 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 consulta dentro de la clave comienza 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 combinada de tiempo transcurrido desde el comienzo del procesamiento de la consulta 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 menor tiempo transcurrido desde el inicio del procesamiento de la consulta hasta que el servidor devuelve el primer lote de resultados

metrics
.firstResponseExecMicros
.sumOfSquares

NumberDecimal

Literal

Suma de los cuadrados de las cantidades de tiempo transcurrido desde el comienzo del procesamiento de la consulta hasta que el servidor devuelve el primer lote de resultados.

Un valor alto sumOfSquares indica una alta variación en los tiempos de procesamiento de consultas.

metrics.docsReturned

Documento

Literal

Describe la cantidad 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 consulta 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 sumOfSquares alto indica una alta variación en la cantidad de documentos devueltos entre consultas individuales.

metrics.firstSeenTimestamp

fecha

Literal

Hora en que se utilizó por primera vez una consulta con la clave dada 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, excluyendo pausas intencionales como el tiempo de espera en bloqueos y control de flujo.

metrics
.delinquentAcquisitions

Número largo

Literal

Número de veces que las operaciones de consulta excedieron el tiempo de adquisición del ticket de ejecución esperado.

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

Mayor duración de tiempo en milisegundos en que una operación de consulta excedió el tiempo de adquisición del ticket de ejecución esperado.

Nuevo en la versión 8.2.

metrics
.cpuNanos

Documento

Literal

Contiene métricas relacionadas con el uso de CPU en una consulta. 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 empleado en una consulta, 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 tiempo mínimo de CPU empleado en una consulta, 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 empleado en las operaciones de consulta. 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 consulta registrada. El valor collectionType puede ser uno de los siguientes:

Campo
Descripción

changeStream

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

collection

La consulta se emitió 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 en key.queryShape varían según el comando que resultó en la entrada de estadísticas de consulta. $queryStats crea entradas de estadísticas de consulta para aggregate findlos comandos,, distinct count y.

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

Cadena 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 relación de numCandidates dividido por el valor limit.

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

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

Luego, ejecute 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 del ejemplo $queryStats 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 las estadísticas de consulta transformadas, incluya el campo transformIdentifiers en la etapa de canalización:

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 su implementación, utiliza una clave HMAC única por organización Atlas para transformar sus datos y evitar la recopilación de información confidencial.

Volver

$querySettings

En esta página