Definição
Aviso
O estágio de agregação $queryStats não é suportado e não é garantido que seja estável em uma versão futura. Não crie uma funcionalidade que dependa de um formato de saída específico desse estágio, pois a saída pode mudar em uma versão futura.
Retorna estatísticas de tempo de execução para query registradas.
$queryStats coleta e reporta métricas para queries do aggregate(), find() e distinct() . O $queryStats não coleta informações para queries que usam Queryable Encryption.
Requisitos
O estágio $queryStats é ativado em sistemas hospedados no MongoDB Atlas com uma camada do cluster de pelo menos M10.
Para executar o estágio $queryStats , seu pipeline deve atender aos seguintes requisitos:
O pipeline deve ser executado no banco de dados
admin.$queryStatsdeve ser o primeiro estágio do pipeline.
Sintaxe
db.adminCommand( { aggregate: 1, pipeline: [ { $queryStats: { transformIdentifiers: { algorithm: <string>, hmacKey: <binData> /* subtype 8 - used for sensitive data */ } } } ], cursor: { } } )
Importante
Você não pode executar $queryStats em uma collection específica. Para obter exemplos completos, consulte Exemplos.
Campos de comando
$queryStats usa os seguintes campos:
Campo | necessidade | Tipo | Descrição |
|---|---|---|---|
| Opcional | Documento | Especifica opções de transformação adicionais para a saída |
transformIdentifiers.algorithm | Obrigatório ao especificar o objeto | String | O tipo de transformação de hash aplicada às informações de namespace e nomes de campo na saída. O único valor |
transformIdentifiers.hmacKey | Obrigatório ao especificar o objeto | BinData | A entrada de chave privada na transformação HMAC. |
Controle de acesso
Se a sua implementação impuser controle de acesso, o usuário executando o $queryStats deverá ter as seguintes permissões:
Para executar o
$queryStatssem a opçãotransformIdentifiers, o usuário deve ter a ação de privilégioqueryStatsRead.Para executar o
$queryStatscom a opçãotransformIdentifiers, o usuário deve ter as ações de privilégio doqueryStatsReadequeryStatsReadTransformed.
O role clusterMonitor integrado fornece os privilégios queryStatsRead e queryStatsReadTransformed . O exemplo a seguir concede a função clusterMonitor no reconhecimento de data center admin :
db.grantRolesToUser( "<user>", [ { role: "clusterMonitor", db: "admin" } ] )
Comportamento
As seções a seguir descrevem detalhes comportamentais do estágio $queryStats .
Como $queryStats rastreia estatísticas de query
As estatísticas do estágio $queryStats são rastreadas em uma collection virtual armazenada na memória. O limite de memória para a collection virtual é de 1% da memória total do sistema.
Como os Grupos $queryStats Retornaram documento
$queryStats agrupa queries com propriedades comuns no mesmo documento de saída. O documento resultante é chamado de entrada de estatísticas de query.
$queryStats agrupa query semelhantes normalizando valores de campo fornecidos pelo usuário para seus tipos de dados. Por exemplo, um filtro especificado como { item: 'card' } é normalizado para { item :
'?string'}. $queryStats também normaliza os valores de algumas opções de query, como hint e comment.
$queryStats preserva valores literais para opções como readConcern e readPreference.
Para obter a lista completa de opções incluídas em uma entrada de estatísticas de query, consulte localizar a forma de query do comando.
Como $queryStats transforma dados usando transformIdentifiers
Quando uma chave HMAC é especificada para a opção transformIdentifiers , o $queryStats utiliza a chave HMAC para aplicar uma função de hash HMAC-SHA-256 nos seguintes dados:
Nomes dos campos do documento
Nomes de coleção
nomes de banco de dados
$queryStats não aplica a transformação HMAC aos seguintes dados:
Palavras-chave MQL, como nomes de operadores (por exemplo,
$gte).Nomes de parâmetros como o parâmetro
partitionByem$setWindowFields.Valores do campo.
$queryStatsnormaliza os valores de campo em uma query para seus tipos de dados (como número ou string) quando a query é registrada.$queryStatsnunca armazena valores de campo que contêm dados do usuário.
Para obter um exemplo de saída transformada, consulte Exemplo transformado.
$queryStats Log Entries
O MongoDB registra $queryStats operações nos registros de sistema. Por padrão, o MongoDB registra apenas a invocação de operações $queryStats , não a saída da operação. Para operações do $queryStats que incluem a opção transformIdentifiers , você pode especificar se a saída transformada está incluída na entrada de registro.
Para saber como controlar o comportamento de registro do $queryStats , consulte Alternar saída de registro do $queryStats.
Fluxos de alterações
As estatísticas de query para change streams são atualizadas quando ocorre um desses eventos:
Um cursor é criado
Uma operação
getMoreé concluídaUm cursor fecha
As estatísticas de query relatadas para change streams têm estes comportamentos:
Métricas de execução como
totalExecMicroscontêm informações para a operação mais recente (criação do cursor,getMoreou fechamento do cursor).As operações
getMoreinternas incrementam a métricaexecCount.firstResponseExecMicrosetotalExecMicrossão sempre os mesmos porque as estatísticas são coletadas e atualizadas para cada operaçãogetMore.Quando o cursor fecha,
lastExecutionMicrosé 0.
Comportamento de cluster fragmentado
Novidades na versão 8.3.
Em clusters fragmentados, o MongoDB registra as estatísticas de query separadamente em cada mongod e mongos quando $queryStats está ativado. Os servidores de shard também registram estatísticas para queries originadas de mongos. Eles fornecem métricas em nível de shard mais completas para queries que os usuários roteiam por mongos.
Saída
$queryStats retorna uma matriz de entradas de estatísticas de consulta. Algumas propriedades de entrada de estatísticas de query contêm valores literais e algumas propriedades são normalizadas para agrupar queries comuns.
As entradas de estatísticas de query contêm os seguintes documentos de nível superior:
Documento | Descrição |
|---|---|
| A combinação exclusiva de atributos que definem uma entrada na saída de estatísticas de query. O
Cada combinação única de atributos cria uma entrada separada na collection virtual do |
| A hora UTC em que |
| Contém métricas agregadas de tempo de execução associadas a cada entrada de estatísticas de query. Cada entrada de estatísticas de query registra estatísticas para cada query que compartilha a mesma chave. |
Cada documento na array de saída contém os seguintes campos:
Campo | Tipo | Literal ou Normalizado | Descrição |
|---|---|---|---|
| Documento | literal | Contém a forma de query e atributos de query adicionais que agrupam um conjunto de queries |
| Documento | literal | Contém atributos usados para agrupar queries semelhantes. Para obter mais informações, consulte Forma de query. |
| Documento | literal | Descreve as informações do cliente associadas à chave |
| Documento | literal | O nome do aplicativo cliente |
| Documento | literal | Descreve o driver usado para emitir a query |
| String | literal | Nome do driver usado para emitir a query. Os valores possíveis incluem |
| String | literal | Número da versão do driver usado para emitir a query |
| Documento | literal | Descreve o sistema operacional usado pelo cliente que emitiu a query |
| String | literal | Tipo do sistema operacional |
| String | literal | Nome do sistema operacional |
| String | literal | Arquitetura do sistema operacional. Os valores possíveis incluem |
| String | literal | Número da versão do sistema operacional |
| Documento | literal | A referência de leitura para a chave |
| String | literal | O tipo de coleção para o qual a query foi emitida. Para obter mais informações, consulte Tipo de coleção. |
| Documento ou string | Normalizado | O índice que foi usado como dica para a query |
| String | Normalizado | O tamanho do lote da chave. O tamanho do lote especifica o número máximo de documentos que podem ser devolvidos em cada lote de um resultado de query. Por padrão, o tamanho do lote inicial é o menor de |
| String | Normalizado | Comentário associado à chave |
| String | Normalizado | valor maxTimeMS associado à chave |
| Boolean | Normalizado | Opção noCursorTimeout associada à chave |
| String | literal | preferência de leitura associada à chave |
| String | literal | A versão da API estável associada à chave. Consulte API estável. |
| Boolean | literal | O valor do parâmetro |
| Boolean | literal | O valor do parâmetro |
| String | literal | Uma representação em hash dos valores no |
| String | literal | Novidades na versão 8.0.
|
| Documento | literal | Descreve estatísticas de tempo de execução para a chave |
| Número longo | literal | Tempo de execução de execução para a query mais recente para todas as queries com a chave fornecida |
| Número longo | literal | Número de vezes que a query com a chave fornecida foi executada |
| Documento | literal | Descreve o número de chaves examinadas por queries |
metrics.keysExamined.sum | Inteiro | literal | Número total de chaves examinadas |
metrics.keysExamined.max | Número longo | literal | Número máximo de chaves examinadas |
metrics.keysExamined.min | Número longo | literal | Menor número de chaves examinadas |
metrics.keysExamined.sumOfSquares | NumberDecimal | literal | Soma dos quadrados do número de chaves examinadas. Um valor |
| Documento | literal | Descreve o número de documentos examinados por queries |
metrics.docsExamined.sum | Inteiro | literal | Número total de documentos examinados na query |
metrics.docsExamined.max | Número longo | literal | Número máximo de documentos examinados |
metrics.docsExamined.min | Número longo | literal | Número mínimo de documentos examinados |
metrics.docsExamined.sumOfSquares | NumberDecimal | literal | Soma de quadrados do número de documentos examinados. Um valor |
| Documento | literal | Objeto que contém dois campos:
|
| Documento | literal | Objeto que contém dois campos:
|
| Documento | literal | Objeto que contém dois campos:
|
| Documento | literal | Objeto que contém dois campos:
|
| Documento | literal | Descreve o tempo total gasto executando query com a chave fornecida. Se a query resultou em Todos os subcampos de |
metrics.totalExecMicros.sum | Número longo | literal | Tempo total gasto executando query com a chave fornecida |
metrics.totalExecMicros.max | Número longo | literal | Maior tempo gasto executando uma query com a chave fornecida |
metrics.totalExecMicros.min | Número longo | literal | Menor tempo gasto executando uma query com a chave fornecida |
metrics.totalExecMicros.sumOfSquares | NumberDecimal | literal | Soma dos quadrados do tempo total de execução de todas as query com a chave fornecida. Um valor alto de |
metrics.firstResponseExecMicros | Documento | literal | Descreve o tempo gasto desde o início do processamento de uma query na chave até quando o servidor retorna o primeiro lote de resultados Todos os subcampos de |
metrics.firstResponseExecMicros.sum | Número longo | literal | Quantidade combinada de tempo gasto desde o início do processamento da query até quando o servidor retorna o primeiro lote de resultados |
metrics.firstResponseExecMicros.max | Número longo | literal | Maior tempo gasto desde o início do processamento de query até quando o servidor retorna o primeiro batch de resultados |
metrics.firstResponseExecMicros.min | Número longo | literal | O menor tempo gasto desde o início do processamento da query até quando o servidor retorna o primeiro lote de resultados |
metrics.firstResponseExecMicros.sumOfSquares | NumberDecimal | literal | Soma dos quadrados do tempo gasto desde o início do processamento da query até quando o servidor retorna o primeiro lote de resultados. Um valor alto de |
| Documento | literal | Descreve o número de documento retornados por query dentro da chave |
metrics.docsReturned.sum | Número longo | literal | Número total de documento retornados por query com a chave fornecida |
metrics.docsReturned.max | Número longo | literal | Número máximo de documentos retornados por uma query com a chave fornecida |
metrics.docsReturned.min | Número longo | literal | Menor número de documentos retornados por uma query com a chave fornecida |
metrics.docsReturned.sumOfSquares | NumberDecimal | literal | Soma dos quadrados do número de documentos retornados por uma query dentro da chave. Um valor alto de |
| Data | literal | Tempo em que uma query com a chave fornecida foi usada pela primeira vez desde a última reinicialização |
| Data | literal | Hora em que uma query com a chave fornecida foi usada mais recentemente |
| Número longo | literal | O tempo de execução da operação, excluindo pausas intencionais, como tempo de espera em travas e controle de fluxo. |
metrics.delinquentAcquisitions | Número longo | literal | Número de vezes que as operações de query excederam o tempo esperado de aquisição do ticket de execução. Novidades na versão 8.2. |
metrics.totalAcquisitionDelinquencyMillis | Número longo | literal | Tempo total em milissegundos em que as operações de query excederam o tempo esperado de aquisição do ticket de execução. Novidades na versão 8.2. |
metrics.maxAcquisitionDelinquencyMillis | Número longo | literal | Maior duração de tempo em milissegundos em que uma operação de query excedeu o tempo esperado de aquisição do ticket de execução. Novidades na versão 8.2. |
metrics.cpuNanos | Documento | literal | Contém métricas relacionadas ao uso da CPU para uma operação de query. Este documento está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
metrics.cpuNanos.sum | Número longo | literal | O tempo total da CPU gasto por uma operação de queryem nanossegundos. Este campo está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
metrics.cpuNanos.max | Número longo | literal | O tempo máximo da CPU gasto em uma operação de queryem nanossegundos. Este campo está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
metrics.cpuNanos.min | Número longo | literal | O tempo mínimo da CPU gasto em uma operação de queryem nanossegundos. Este campo está disponível apenas em sistemas Linux. Novidades na versão 8.2. |
metrics.cpuNanos.sumOfSquares | NumberDecimal | literal | Soma dos quadrados do tempo da CPU gastos em operações de query. Este campo está disponível apenas em sistemas Linux. Um valor Novidades na versão 8.2. |
metrics.numInterruptChecksPerSec | Número longo | literal | Número de vezes que uma operação de query chama Novidades na versão 8.3. |
metrics.overdueInterruptApproxMaxMillis | Número longo | literal | Número máximo de milissegundos em que o sistema atrasou Novidades na versão 8.3. |
collectionType
O campo key.collectionType indica o tipo de collection em que a query registrada foi emitida. O collectionType pode ser um dos seguintes valores:
Campo | Descrição |
|---|---|
| A query era uma operação de change stream. |
| A query foi emitida em uma collection padrão. |
| A query foi emitida em uma collection que não existe. |
| A query foi emitida em uma coleção de séries temporais. |
| A query foi emitida em uma visualização. |
| A query foi emitida em uma collection virtual. As seguintes operações ocorrem em collections virtuais: |
forma de query
O documento key.queryShape contém campos de forma de query . Para saber mais sobre formas de query, consulte Formas de query.
Os campos em key.queryShape variam de acordo com o comando que resultou na entrada das estatísticas da query. $queryStats cria entradas de estatísticas de query para comandos aggregate, find, distinct e count.
Cada propriedade de forma de query corresponde a uma opção de query. Por exemplo, key.queryShape.sort corresponde à especificação sort() para a forma de query.
encontre a forma de query de comando
A tabela a seguir descreve as propriedades da forma de query para comandos find .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| Documento | literal |
| Documento | Normalizado |
| Inteiro | Normalizado |
| Inteiro | Normalizado |
| Boolean | literal |
| Documento | Normalizado |
| Documento | Normalizado |
| Boolean | literal |
| Boolean | literal |
| Boolean | literal |
| Boolean | literal |
| Boolean | literal |
| Documento | literal |
| Boolean | literal |
| Documento | Normalizado |
forma de query de comando agregada
A tabela a seguir descreve as propriedades da forma de query para comandos aggregate .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Array | Normalizado |
| Boolean | literal |
| Boolean | literal |
| Documento | literal |
| string ou documento | Normalizado |
| Documento | Normalizado |
forma de query de comando distinta
A tabela a seguir descreve as propriedades da forma de query para comandos distinct .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| String | literal |
| Documento | Normalizado |
forma de query do comando de contagem
A tabela a seguir descreve as propriedades da forma de query para comandos count .
Campo | Tipo | Literal ou Normalizado |
|---|---|---|
| Documento | Normalizado |
| Documento | Normalizado |
| Inteiro | Normalizado |
| Inteiro | Normalizado |
Métricas complementares
As entradas de estatísticas de query podem conter um documento metrics.supplementalMetrics que fornece informações adicionais sobre suas queries.
Métricas $vectorSearch
Se sua forma de query contiver $vectorSearch, $queryStats gerará as seguintes métricas complementares:
Campo | Tipo | Descrição |
|---|---|---|
metrics.supplementalMetrics.vectorSearch | Documento | Métricas adicionais sobre um estágio de agregação |
metrics.supplementalMetrics.vectorSearch.limit | Documento | Métricas relacionadas ao valor |
metrics.supplementalMetrics.vectorSearch.numCandidatesLimitRatio | Documento | Métricas relacionadas ao valor |
Exemplos
Para executar os exemplos nesta seção, comece com os seguintes dados:
db.products.insertMany( [ { item: "card", qty: 15 }, { item: "envelope", qty: 20 }, { item: "stamps" , qty: 30 } ] )
Em seguida, execute estes comandos:
db.products.find( { item: "card" } ) db.products.aggregate( [ { $match: { qty: { $gt: 20 } } } ] )
Os seguintes exemplos mostram a saída do $queryStats utilizando diferentes tipos de transformação de dados:
O exemplo de saída $queryStats nas seções a seguir pode variar de acordo com a execução de outros comandos.
Exemplo não transformado
Entrada:
db.getSiblingDB("admin").aggregate( [ { $queryStats: { } } ] )
Saída:
[ { 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 }) } ]
Exemplo transformado
Entrada:
db.getSiblingDB("admin").aggregate( [ { $queryStats: { transformIdentifiers: { algorithm: "hmac-sha-256" , hmacKey: BinData(8, "87c4082f169d3fef0eef34dc8e23458cbb457c3sf3n2") } } } ] )
Saída:
[ { 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 usar o driver Node.js do MongoDB para adicionar um estágio $queryStats a um pipeline de agregação , use o operador $queryStats em um objeto de pipeline.
Exemplo não transformado
O exemplo a seguir cria um estágio de pipeline que gera estatísticas de tempo de execução não transformadas sobre queries registradas. Em seguida, o exemplo executa o agregação pipeline:
const pipeline = [{ $queryStats: {} }]; const adminDb = client.db("admin"); const cursor = adminDb.aggregate(pipeline); return cursor;
Exemplo transformado
Para retornar estatísticas de query transformada, inclua o campo transformIdentifiers no estágio do 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;
Collection de dados do MongoDB Atlas
O MongoDB Atlas usa periodicamente $queryStats para coletar dados anônimos sobre suas query, o que ajuda a melhorar os produtos MongoDB. Seus dados também podem ser usados para fazer sugestões de funcionalidades com base no uso. O MongoDB mantém os dados coletados com $queryStats por quatro anos.
Quando o Atlas executa o $queryStats em seu sistema, ele usa uma chave HMAC exclusiva por organização do Atlas para transformar seus dados e evitar a coleta de informações confidenciais.