Definición
validateEl comando
validateverifica los datos y los índices de una colección para garantizar su exactitud y devuelve los resultados.Tip
En
mongosh, este comando también se puede ejecutar a través delvalidate()método asistente.Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.Modificado en la versión 5.0.
A partir de la versión 5.0, el comando
validatetambién puede encontrar inconsistencias en la colección y corregirlas si es posible.Las inconsistencias del índice incluyen:
Un índice es multiclave, pero no hay campos multiclave.
Un índice tiene multikeyPaths que cubren campos que no son multikey.
Un índice no tiene multikeyPaths pero hay documentos multikey (para índices creados antes de 3.4).
Si el comando
db.collection.validate()detecta alguna incongruencia, se devuelve una advertencia y la bandera de reparación en el índice se establece entrue.db.collection.validate()también valida cualquier documento que infrinja las reglas de validación de esquemasde la colección.El método
db.collection.validate()enmongoshproporciona un contenedor en torno avalidate.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
No hay soporte para Gratuito y .
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
Modificado en la versión 5.0.
El comando tiene la siguiente sintaxis:
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 comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción | |
|---|---|---|---|
| string | The name of the collection to validate. | |
booleano | opcional. Una bandera que determina si el comando realiza una verificación más lenta pero más exhaustiva o una verificación más rápida pero menos exhaustiva.
El valor es por defecto Para el motor de almacenamiento WiredTiger, solo | ||
booleano | opcional. Una bandera que determina si el comando realiza una reparación.
El valor es por defecto Una reparación solo puede ejecutarse en un nodo autónomo. La reparación soluciona estos problemas:
Para obtener más información, consulta la opción Nuevo en la versión 5.0. | ||
booleano | opcional. Una bandera que permite a los usuarios realizar una validación rápida para detectar opciones de índice no válidas sin escanear todos los documentos e índices.
El valor es por defecto Ejecutar el comando de validación con La opción de validación
La opción de validación Si se detecta un índice no válido, el comando de validación te pedirá que uses el comando Novedades en la versión 5.0.4. |
Comportamiento
Rendimiento
El comando validate puede ser lento, especialmente en conjuntos de datos grandes.
El comando validate obtiene un bloqueo exclusivo W en la colección. Esto bloqueará todas las lecturas y guardados en la colección hasta que la operación finalice. Cuando se ejecuta en una secundaria, la operación validate puede bloquear todas las demás operaciones en esa secundaria hasta que finalice.
Advertencia
Debido al impacto en el rendimiento de la validación, considere ejecutar validate solamente en los nodos de un set de réplicas secundario. Puedes utilizar rs.stepDown() para instruir al primario actual para que se convierta en secundario y así evitar afectar a un nodo primario en funcionamiento.
Métricas de rendimiento de datos
El $currentOp y el currentOp comando incluyen información dataThroughputAverage e dataThroughputLastSecond para validar operaciones en curso.
Los mensajes de registro para las operaciones de validación incluyen información dataThroughputAverage y dataThroughputLastSecond.
Restricciones
El comando validate ya no admite afterClusterTime. Como tal, validate no se puede asociar con sesiones causalmente coherentes.
Ejemplos
Para validar una colección
myCollectionusando la configuración de validación por defecto (específicamente, completo: falso):db.runCommand( { validate: "myCollection" } ) Para realizar una validación completa de la colección
myCollection, especifica full: true:db.runCommand( { validate: "myCollection", full: true } ) Para reparar la colección
myCollection, especifica reparar: true:db.runCommand( { validate: "myCollection", repair: true } ) Para validar los metadatos en la colección
myCollection, especifique metadata: true:db.runCommand( { validate: "myCollection", metadata: true } )
Validar salida
Nota
La salida puede variar dependiendo de la versión y configuración específica de tu instancia de MongoDB.
Especifica completo: verdadero para una salida más detallada.
validate.nInvalidDocumentsLa cantidad de documentos no válidos en la colección. Los documentos no válidos son aquellos que no se pueden leer, lo que significa que el documento BSON está corrupto y tiene un error o una discrepancia de tamaño.
Los documentos que no cumplen son aquellos que no se ajustan al esquema de la colección. Los documentos no conformes no se cuentan como inválidos en
nInvalidDocuments.
validate.nrecordsEl número de documentos en la colección.
validate.keysPerIndexUn documento que contiene el nombre y el recuento de entradas de índice para cada índice en la colección.
"keysPerIndex" : { "_id_" : <num>, "<index2_name>" : <num>, ... } keysPerIndexidentifica el índice solo por su nombre.
validate.indexDetailsUn documento que contiene el estado de la validación del índice para cada índice.
"indexDetails" : { "_id_" : { "valid" : <boolean> }, "<index2_name>" : { "valid" : <boolean> }, ... } indexDetailsidentifica el índice específico (o índices) que es inválido. Las versiones anteriores de MongoDB marcarían todos los índices como inválidos, si alguno de los índices estuviera inválido.indexDetailsidentifica el índice solo por su nombre. Las versiones anteriores de MongoDB mostraban el namespace completo del índice; es decir,<db>.<collection>.$<index_name>.
validate.nsEl nombre completo del namespace de la colección. Los espacios de nombres incluyen el nombre de la base de datos y el nombre de la colección en la forma
database.collection.
validate.validUn booleano que es
truesivalidatedetermina que todos los aspectos de la colección son válidos. Cuandofalse, consulta el campoerrorspara obtener más información.
validate.repairedUn valor booleano que es
truesivalidatereparó la colección.
validate.warningsUn arreglo que contiene mensajes de advertencia, si los hay, respecto a la propia operación de validación. Los mensajes de advertencia no indican que la colección sea en sí misma inválida. Por ejemplo:
"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.errorsSi la colección no es válida (es decir,
valides falso), este campo contendrá un mensaje que describe el error de validación.
validate.extraIndexEntriesUn arreglo que contiene información para cada entrada de índice que apunta a un documento que no existe en la colección.
"extraIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, // for the non-existent document "indexKey" : { "<key1>" : <value>, ... } } ... ] Nota
Para el arreglo
extraIndexEntries, la suma de todos los tamaños de campoindexKeytiene un límite de 1MB, donde los tamaños incluyen tanto las claves como los valores para elindexKey. Si la suma supera este tamaño, el campo de advertencia mostrará un mensaje.
validate.missingIndexEntriesUn arreglo que contiene información para cada documento que carece de la entrada de índice correspondiente.
"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>, ... } } ... ] Nota
Para el arreglo
missingIndexEntries, la suma del tamaño del campoidKeyy todos sus tamaños de campoindexKeytiene un límite de 1MB, donde los tamaños de los campos incluyen tanto las claves como los valores paraidKeyyindexKey. Si la suma supera este tamaño, el campo de advertencia muestra un mensaje.
validate.corruptRecordsUn arreglo de valores
RecordIdpara documentos que no se pueden leer, posiblemente porque los datos están dañados. Estos documentos se informan como corruptos durante la validación. UnRecordIdes una clave interna de 64 bits entera que identifica de manera única un documento en una colección."corruptRecords" : [ NumberLong(1), // RecordId 1 NumberLong(2) // RecordId 2 ] Nuevo en la versión 5.0.
validate.okUn número entero con el valor
1cuando el comando se ejecuta correctamente. Si el comando falla, el campooktiene un valor de0.