Definição
Alterado na versão 6.2.
validateO comando verifica a exatidão dos dados e índices de uma collection e gera os resultados. O comando também corrige quaisquer inconsistências na contagem e no tamanho dos dados de uma
validatecollection.Dica
mongoshEm, esse comando também pode ser executado por meio do métodovalidate()assistente.Os métodos auxiliares são convenientes para os
mongoshusuários, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados . Nos casos em que a conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.Alterado na versão 5.0.
A partir da 5.0 versão, o comando também pode encontrar inconsistências na coleção e corrigi-las, se
validatepossível.As inconsistências de índice incluem:
Um índice é multikey, mas não há campos multikey.
Um índice tem multikeyPaths cobrindo campos que não são multikey.
Um índice não tem multikeyPaths, mas existem documentos multikey (para índices construídos antes da versão 3.4).
Se quaisquer inconsistências forem detectadas pelo comando
db.collection.validate(), um aviso será retornado e o sinalizador de reparo no índice será configurado paratrue.db.collection.validate()também valida quaisquer documentos que violem as regras de validação do esquemada coleção.Observação
O comando
validatenão oferece suporte a visualizações e gera um erro quando executado em uma visualização.O
db.collection.validate()método em fornece ummongoshwrappervalidatepara.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Esse comando não é suportado em clusters M0 e Flex. Para obter mais informações, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O comando tem a seguinte sintaxe:
db.runCommand( { validate: <string>, // Collection name full: <boolean>, // Optional repair: <boolean>, // Optional, added in MongoDB 5.0 metadata: <boolean>, // Optional, added in MongoDB 5.0.4 checkBSONConformance: <boolean> // Optional, added in MongoDB 6.2 background: <boolean> // Optional } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição | |
|---|---|---|---|
| string | O nome da coleção para validar. | |
| booleano | Opcional. Um sinalizador que determina se o comando executa uma verificação mais lenta, porém mais completa, ou uma verificação mais rápida, porém menos completa.
O padrão é Para o mecanismo de armazenamento WiredTiger, somente o processo de validação | |
| booleano | Opcional. Um sinalizador que determina se o comando executa um reparo.
O padrão é Só é possível executar um reparo em um nó standalone. O reparo corrige os seguintes problemas:
IMPORTANTE: para definir Para obter mais informações, consulte a opção Novidade na versão 5.0. | |
| booleano | Opcional. Um sinalizador que permite que os usuários realizem uma validação rápida para detectar opções de índice inválidas sem digitalizar todos os documentos e índices.
O padrão é A execução do A opção de validação do
A opção de validação Se for detectado um índice inválido, o comando validate solicitará que você use o comando Novidades na versão 5.0.4. | |
| booleano | Opcional. Se
Novidades na versão 6.2. | |
| booleano | Opcional. Se
O padrão é Novidades na versão 8.1. |
Comportamento
Desempenho
O comando pode ser lento, particularmente em conjuntos de dados validate maiores.
O comando obtém um bloqueio validate exclusivo W na coleção. Isso bloqueará todas as leituras e escritos na coleção até que a operação seja concluída. Quando executada em um secundário, a operação pode bloquear todas as outras operações nesse secundário até que ela seja validate concluída.
Aviso
Devido ao impacto da validação no desempenho, considere a execução de validate somente nos nós secundários do conjunto de réplicas. Você pode usar rs.stepDown() para instruir o nó primário atual a se tornar um secundário para evitar o impacto em um nó primário ativo.
Métricas de taxa de transferência de dados
Os comandos $currentOp e currentOp incluem informações dataThroughputAverage e dataThroughputLastSecond para validar operações em andamento.
As mensagens de registro para validar operações incluem informações dataThroughputAverage e dataThroughputLastSecond.
Melhorias na validação de collections
A partir do MongoDB,6.2 o validate comando e db.collection.validate() o método:
Verifique as collections para garantir que os documentos BSON estejam em conformidade com as especificações BSON.
Marque coleções de séries temporais para inconsistências de dados internos.
Tenha uma nova opção
checkBSONConformanceque habilita verificações BSON abrangentes.
A partir do MongoDB 8.3, o comando validate e o método db.collection.validate() verificam as coleções para garantir que uma coleção não tenha documentos que excedam 16 MB.
Restrições
O comando validate não suporta mais afterClusterTime. Dessa forma, não pode ser associadavalidate a sessões causalmente consistentes.
As coleções de séries temporais foram introduzidas no MongoDB 5.0. A partir de v5.2, o formato interno padrão para armazenar medições de séries temporais foi alterado. Devido a esta alteração:
Coleções de séries temporais criadas antes de v5.2 pode conter documentos no formato antigo e no novo. Internamente, essas collections são sinalizadas como
timeseriesBucketsMayHaveMixedSchemaData: true.As coleções de séries temporais criadas na v5.2 ou posterior sempre conterão documentos no novo formato. Internamente, essas collections são sinalizadas como
timeseriesBucketsMayHaveMixedSchemaData: falseou não são sinalizadas.
Quando o sinalizador é true, as queries de série temporal levam em consideração o formato novo e o antigo. Quando o sinalizador é false ou está ausente, as queries de série temporal levam em consideração apenas o novo formato.
Devido a um bug descrito em SERVER-,91194 em algumas condições, a sinalização pode ser perdida. Quando isso acontece com coleções de séries temporais criadas antes de v.,5 2os resultados da query de leitura podem estar incompletos. Ou seja, alguns documentos podem ser perdidos, mesmo que ainda estejam armazenados no disco.
Para determinar se você é afetado por isso, execute em sua coleção de séries temporais. O comando retorna um erro se a coleção for afetada pelo bug. Os resultados da consulta de leitura podem estar incorretos se esse for o validate caso.
Se afetado, atualize para uma versão fixa e defina timeseriesBucketsMayHaveMixedSchemaData como true para cada coleção afetada para garantir que futuras consultas sobre a coleção retornem resultados corretos. As etapas completas desse processo estão localizadas aqui.
Formato da chave do índice
Iniciando no MongoDB 6.0, o comando validate retorna uma mensagem se um índice único tiver um formato de chave incompatível. A mensagem indica que um formato antigo está sendo usado.
Estatísticas de contagem e tamanho dos dados
O comandovalidateatualiza as estatísticas de contagem e tamanho de dados da collection nacollStatssaída com seus valores corretos.
Observação
No caso de um desligamento impróprio, as estatísticas de contagem e tamanho dos dados podem ser imprecisas.
Exemplos
Para validar uma coleção
myCollectionusando a configuração de validação padrão (especificamente, full: false):db.runCommand( { validate: "myCollection" } ) Para executar uma validação completa da coleção
myCollection, especifique full: true:db.runCommand( { validate: "myCollection", full: true } ) Para reparar a coleção
myCollection, especifique repair: true:db.runCommand( { validate: "myCollection", repair: true } ) Para validar os metadados na coleção
myCollection, especifique metadados: true:db.runCommand( { validate: "myCollection", metadata: true } ) Para executar verificações adicionais de conformidade com BSON em
myCollection, especifique checkBSONConformance: true:db.runCommand( { validate: "myCollection", checkBSONConformance: true } )
Validar saída
Observação
O resultado pode variar dependendo da versão e configuração específica da sua instância MongoDB.
Especifique completo: true para obter resultados mais detalhados.
validate.nInvalidDocumentsO número de documentos inválidos na coleção. Documentos inválidos são aqueles que não podem ser lidos, o que significa que o documento BSON está corrompido e tem um erro ou uma incompatibilidade de tamanho.
validate.nNonCompliantDocumentsO número de documentos que não estão em conformidade com o esquema da coleção. Os documentos fora de conformidade não são considerados inválidos
nInvalidDocumentsem.Iniciando no MongoDB 6.2, o
nNonCompliantDocumentstambém inclui o número de documentos que não estão em conformidade com os requisitos de BSON ou coleta de séries temporais.
validate.nrecordsO número de documentos na coleção.
validate.keysPerIndexUm documento que contém o nome e a contagem de entrada do índice para cada índice na coleção.
"keysPerIndex" : { "_id_" : <num>, "<index2_name>" : <num>, ... } keysPerIndexidentifica o índice somente por seu nome.
validate.indexDetailsAlterado na versão 8.1.
Um documento que contém o status da validação do índice para cada índice e a especificação do índice.
"indexDetails" : { "_id_" : { "valid" : <boolean>, "spec" : <document> }, "<index2_name>" : { "valid" : <boolean>, "spec" : <document> }, ... } indexDetailsidentifica o índice específico (ou índices) que é inválido. Versões anteriores do MongoDB marcariam todos os índices como inválidos, se algum dos índices fosse inválido.indexDetailsidentifica o índice somente por seu nome. Versões anteriores do MongoDB exibiam o namespace completo do índice; ou<db>.<collection>.$<index_name>seja,.O documento
specé a especificação do índice, que varia dependendo de como o índice é definido. Alguns exemplo de campos de documentospecincluem:spec.v. A versão do índice.spec.unique. Um valor booleano que indica se o índice é único.spec.key. O identificador da chave do índice.spec.name. O nome do índice.
Novidades na versão 8.1.
validate.nsO namespace completo da coleção. Os namespaces incluem o nome do banco de dados e o nome da coleção no formulário
database.collection.
validate.validUm booleano que é se
truevalidatedeterminar que todos os aspectos da coleção são válidos. Quando,falseconsulte o campo para maiserrorsinformações.
validate.repairedUm booleano que é
truevalidatese reparou a coleção.
validate.repairModeNovidades na versão 8.2.
Uma string que indica quais tipos de inconsistências de dados o comando
validatetentou reparar, se detectado. Os possíveis valoresrepairModeincluem:None: nenhuma ação de reparo é tomada.FixErrors: tenta corrigir quaisquer erros de validação.AdjustMultikey: Tenta corrigir inconsistências de múltiplas chaves ajustando metadados de múltiplas chaves.
validate.warningsUma array que contém mensagens de aviso, se houver, relacionadas à própria operação de validação. As mensagens de aviso não indicam que a coleção é inválida. Por exemplo:
"warnings" : [ "Could not complete validation of table:collection-28-6471619540207520785. This is a transient issue as the collection was actively in use by other operations." ],
validate.errorsSe a coleção não for válida (ou seja, é falso), este campo conterá uma mensagem descrevendo o erro de
validvalidação.
validate.extraIndexEntriesUma array que contém informações para cada entrada de índice que aponta para um documento que não existe na coleção.
"extraIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, // for the non-existent document "indexKey" : { "<key1>" : <value>, ... } } ... ] Observação
Para a array, a soma de todos
extraIndexEntriesosindexKeytamanhos de campo tem um limite de 1MB, em que os tamanhos incluem as chaves e os valoresindexKeypara. Se a soma exceder esse tamanho, o campo de aviso exibirá uma mensagem.
validate.missingIndexEntriesUma array que contém informações para cada documento que está faltando a entrada de índice correspondente.
"missingIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, "idKey" : <_id key value>, // The _id value of the document. Only present if an ``_id`` index exists. "indexKey" : { // The missing index entry "<key1>" : <value>, ... } } ... ] Observação
Para a array, a soma
missingIndexEntriesdoidKeytamanho do campo e todos os seusindexKeytamanhos de campo tem um limite de 1MB onde os tamanhos de campo incluem as chaves e valoresidKeyparaindexKeye. Se a soma exceder esse tamanho, o campo de aviso exibirá uma mensagem.
validate.corruptRecordsUma array de
RecordIdvalores para documentos ilegíveis, possivelmente porque os dados estão danificados. Esses documentos são relatados como corrompidos durante a validação. UmRecordIdé uma chave interna do número inteiro de 64 bits que identifica exclusivamente um documento em uma coleção."corruptRecords" : [ Long(1), // RecordId 1 Long(2) // RecordId 2 ] Novidade na versão 5.0.
validate.okUm número inteiro com o valor
1quando o comando for bem-sucedido. Se o comando falhar, o campo terá umokvalor0de.