Definição
validateO comando
validateverifica a exatidão dos dados e índices de uma coleção e retorna os resultados.Dica
Em
mongosh, esse comando também pode ser executado por meio do método assistentevalidate().Os métodos auxiliares são práticos para os usuários
mongosh, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade 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 versão 5.0, o comando
validatetambém pode encontrar inconsistências na coleção e corrigi-las, se possí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 método
db.collection.validate()emmongoshfornece um encapsulador em torno devalidate.
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
Alterado na versão 5.0.
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 } )
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 estes problemas:
Para obter mais informações, consulte a opção Novidades 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. |
Comportamento
Desempenho
O comando validate pode ser lento, particularmente em conjuntos de dados maiores.
O comando validate obtém um bloqueio exclusivo W na coleção. Isso bloqueará todas as leituras e gravações na coleção até que a operação seja concluída. Quando executada em um secundário, a operação validate pode bloquear todas as outras operações nesse secundário até que ela seja concluída.
Aviso
Devido ao impacto da validação no desempenho, considere a execução de validate somente nos nós do conjunto de réplicas secundário. 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.
Restrições
O comando validate não mais compatível com afterClusterTime. Então, validate não pode ser associada a sessões causalmente consistentes.
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.
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 } )
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 em
nInvalidDocuments.
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.indexDetailsUm documento que contém o status da validação do índice para cada índice.
"indexDetails" : { "_id_" : { "valid" : <boolean> }, "<index2_name>" : { "valid" : <boolean> }, ... } 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 exibiram o namespace completo do índice; isto é,<db>.<collection>.$<index_name>.
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 é
truesevalidatedeterminar que todos os aspectos da coleção são válidos. Quandofalse, consulte o campoerrorspara mais informações.
validate.repairedUm booleano que é
truesevalidatereparou a coleção.
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 (isto é,
validé falso), este campo conterá uma mensagem descrevendo o erro de validaçã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
extraIndexEntries, a soma de todos os tamanhos de campoindexKeytem um limite de 1MB, em que os tamanhos incluem as chaves e os valores paraindexKey. 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
missingIndexEntries, a soma do tamanho do campoidKeye de todos os seus tamanhos de campoindexKeytem um limite de 1 MB, em que os tamanhos de campo incluem as chaves e valores paraidKeyeindexKey. 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 ] Novidades na versão 5.0.
validate.okUm número inteiro com o valor
1quando o comando for bem-sucedido. Se o comando falhar, o campookterá um valor de0.