Definición
Cambiado en la versión 6.2.
validateEl comando verifica la exactitud de los datos e índices de una colección y devuelve los resultados. Además, corrige cualquier inconsistencia en el recuento y el tamaño de los datos de la
validatecolección.Tip
mongoshEn, este comando también se puede ejecutar a través del métodovalidate()auxiliar.Los métodos auxiliares son convenientes para
mongoshlos usuarios de, pero es posible que no devuelvan el mismo nivel de información que los comandos de la base de datos. En los casos en que no se necesite la conveniencia o se requieran los campos de retorno adicionales, utilice el comando de la base de datos.Cambiado en la versión 5.0.
A partir de la 5.0 versión, el comando también puede encontrar inconsistencias en la colección y corregirlas si es
validateposible.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.Nota
El comando
validateno admite vistas y genera un error cuando se ejecuta contra una vista.El
db.collection.validate()método en proporciona un envoltoriomongoshalrededorvalidatede.
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
Importante
Este comando no es compatible con los clústeres M0 y Flex. Para obtener más información, consulta Comandos no compatibles.
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
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 checkBSONConformance: <boolean> // Optional, added in MongoDB 6.2 background: <boolean> // Optional } )
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción | |
|---|---|---|---|
| string | The name of the collection to validate. | |
| booleano | Opcional. Un indicador que determina si el comando realiza una comprobación más lenta pero más exhaustiva o una comprobació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 los siguientes problemas:
IMPORTANTE: Para configurar 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 La ejecución del 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 Nuevo en la versión 5.0.4. | |
| booleano | opcional. Si
Nuevo en la versión 6.2. | |
| booleano | opcional. Si
El valor es por defecto Nuevo en la versión 8.1. |
Comportamiento
Rendimiento
El comando puede ser lento, especialmente en conjuntos de datos validate grandes.
El comando obtiene un bloqueo validate exclusivo W sobre la colección. Esto bloqueará todas las lecturas y escrituras en la colección hasta que finalice la operación. Cuando se ejecuta en un servidor secundario, la validate operación puede bloquear todas las demás operaciones en ese servidor secundario hasta que finalice.
Advertencia
Debido al impacto en el rendimiento de la validación, considere ejecutar validate solo en los nodos del conjunto de réplicas secundarias. Puede usar rs.stepDown() para indicarle al nodo primario actual que se convierta en secundario y así evitar afectar a un nodo primario activo.
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.
Mejoras en la validación de colecciones
Comenzando en MongoDB,6.2 el validate comando y db.collection.validate() el método:
Revise las colecciones para asegurarse de que los documentos BSON cumplan con las especificaciones de BSON.
Revisa las colecciones de series de tiempo para detectar inconsistencias internas en los datos.
Ten una nueva opción
checkBSONConformanceque habilite comprobaciones completas de BSON.
A partir de MongoDB 8.3, el comando validate y el método db.collection.validate() revisan las colecciones para garantizar que ninguna colección tenga document que superen 16 MB.
Restricciones
El comando validate ya no admite afterClusterTime. Por lo tanto, no se puede asociarvalidate con sesiones causalmente consistentes.
Las colecciones de series de tiempo se introdujeron en MongoDB 5.0. A partir de la v5.2, el formato interno por defecto para almacenar mediciones de series temporales cambió. Debido a este cambio:
Colecciones de series temporales creadas antes de la v5.2 podría contener documentos tanto en el formato antiguo como en el nuevo. Internamente, estas colecciones están marcadas como
timeseriesBucketsMayHaveMixedSchemaData: true.Las colecciones de series temporales creadas en la versión5.2 o posterior siempre contendrán documentos en el nuevo formato. Internamente, esas colecciones se marcan como
timeseriesBucketsMayHaveMixedSchemaData: falseo no se marcan en absoluto.
Cuando la bandera está en true, las consultas de series de tiempo tienen en cuenta tanto el nuevo como el antiguo formato. Cuando la bandera está false o falta, las queries de series de tiempo solo tienen en cuenta el nuevo formato.
Debido a un error descrito en SERVER-,91194 en ciertas condiciones la bandera podría perderse. Cuando esto ocurre con colecciones de series temporales creadas antes de la5 2versión., los resultados de las consultas de lectura podrían estar incompletos. Es decir, podrían faltar algunos documentos, aunque sigan almacenados en el disco.
Para determinar si este problema le afecta, ejecute validate en su colección de series temporales. El comando devuelve un error si la colección está afectada por el fallo. En ese caso, los resultados de su consulta de lectura podrían ser incorrectos.
Si se ve afectado, actualícese a una versión corregida y configure timeseriesBucketsMayHaveMixedSchemaData en true para cada colección afectada para garantizar que las futuras queries sobre la colección devuelvan resultados correctos. Se pueden encontrar los pasos completos de este proceso aquí.
Formato de clave de índice
A partir de MongoDB 6.0, el comando validate devuelve un mensaje si un índice único tiene un formato de clave incompatible. El mensaje indica que se está utilizando un formato antiguo.
Estadísticas del recuento y tamaño de los datos
El comando actualiza las estadísticas de recuento y validate collStats tamaño de datos de la colección en la salida con sus valores correctos.
Nota
En el evento de un apagado no limpio, las estadísticas de recuento y tamaño de datos pueden ser inexactas.
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 } ) Para realizar comprobaciones adicionales de conformidad con BSON en
myCollection, especifica checkBSONConformance: true:db.runCommand( { validate: "myCollection", checkBSONConformance: 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.uuidEl identificador universalmente único (UUID) para la colección.
Nuevo en la versión 6.2.
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.
validate.nNonCompliantDocumentsNúmero de documentos que no se ajustan al esquema de la colección. Los documentos que no cumplen con el esquema no se consideran inválidos
nInvalidDocumentsen.A partir de MongoDB 6.2,
nNonCompliantDocumentstambién incluye la cantidad de documentos que no cumplen con los requisitos de BSON ni de colección de series de tiempo.
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.indexDetailsCambiado en la versión 8.1.
Un documento que contiene el estado de la validación del índice para cada índice y la especificación del índice.
"indexDetails" : { "_id_" : { "valid" : <boolean>, "spec" : <document> }, "<index2_name>" : { "valid" : <boolean>, "spec" : <document> }, ... } 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 espacio de nombres completo del índice; es<db>.<collection>.$<index_name>decir,.El documento
speces la especificación del índice, que varía según cómo se defina el índice. Algunos ejemplos despeccampos de documentos son:spec.v. La versión del índice.spec.unique. Un valor booleano que indica si el índice es único.spec.key. El identificador clave del índice.spec.name. El nombre del índice.
Nuevo en la versión 8.1.
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 valor booleano que es
truesi determina que todos los aspectos de la colección son válidos.validateCuandofalsees, consulte el campo para obtener máserrorsinformación.
validate.repairedUn valor booleano que es
truesi reparó lavalidatecolección.
validate.repairModeNuevo en la versión 8.2.
String que indica qué tipos de inconsistencias de datos intentó reparar el comando
validate, si se detectan. Los valores posibles pararepairModeincluyen:NoneNo se realizan acciones de reparación.FixErrors: Intenta reparar cualquier error de validación.AdjustMultikey: Intenta solucionar las inconsistencias de multikey ajustando los metadatos de multikey.
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
validdecir, es 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 array, la suma de los tamaños de todos
extraIndexEntrieslosindexKeycampos tiene un límite de 1MB, donde los tamaños incluyen tanto las claves como los valores para elindexKeyarray. Si la suma supera este tamaño, el campo de advertencia muestra 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 array, la suma
missingIndexEntriesdelidKeytamaño del campo y todos susindexKeytamaños de campo tiene un límite de 1MB, donde los tamaños de campo incluyen tanto las claves como los valoresidKeyparaindexKeyy. Si la suma excede 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" : [ Long(1), // RecordId 1 Long(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 campo tieneokel0valor.