Para los documentos que ya existen en su colección antes de agregar la validación, puede especificar cómo MongoDB aplica las reglas de validación a estos documentos.
Context
El validationLevel de tu esquema determina los documentos para los cuales MongoDB aplica reglas de validación:
Nivel de validación | Comportamiento |
|---|---|
| MongoDB aplica las mismas reglas de validación tanto a la inserción de documentos como a la actualización de documentos válidos existentes que cumplan con las reglas de validación. No se requiere que las actualizaciones de documentos existentes en la colección que no cumplan con las reglas de validación pasen la validación. |
| (Por defecto) MongoDB aplica las mismas reglas de validación a todas las inserciones y actualizaciones de documentos. |
| MongoDB aplica las reglas de validación a todas las inserciones y actualizaciones de documentos, y garantiza que cada documento de la colección cumpla con dichas reglas. A diferencia de
Nuevo en la versión 9.0. |
Requisito previo
Los ejemplos de esta página utilizan una colección movies. Para crear la colección e insertar los documentos que utilizan los ejemplos, ejecute el siguiente comando:
db.movies.insertMany( [ { title: "The Godfather", year: 1972 }, { title: "Casablanca", year: 1942 } ] )
Especificar validación moderada
El siguiente ejemplo agrega un validador moderate a la colección movies e inserta un documento que cumple con las reglas de validación.
Especifica reglas de validación con nivel de validación moderate.
Agregue un validador a la colección movies con moderate validationLevel:
db.runCommand( { collMod: "movies", validator: { $jsonSchema: { bsonType: "object", required: [ "title" ], properties: { title: { bsonType: "string", description: "title must be a string and is required" } } } }, validationLevel: "moderate" } )
Debido a que validationLevel es moderate, MongoDB aplica las reglas de validación a todas las inserciones de documentos y a las actualizaciones de documentos existentes que ya cumplen con las reglas.
Especificar validación estricta
El siguiente ejemplo agrega un validador strict a la colección movies e inserta un documento que cumple con las reglas de validación.
Especifica reglas de validación con nivel de validación strict.
Agregue un validador a la colección movies con strict validationLevel:
db.runCommand( { collMod: "movies", validator: { $jsonSchema: { bsonType: "object", required: [ "title" ], properties: { title: { bsonType: "string", description: "title must be a string and is required" } } } }, validationLevel: "strict" } )
Debido a que validationLevel es strict, MongoDB aplica las reglas de validación a todas las inserciones y actualizaciones de documentos.
Nota
Al actualizar a la validación strict, MongoDB no comprueba retroactivamente si los documentos existentes en la colección superan la validación. Tras la actualización, la colección puede contener documentos no válidos que existían antes de la actualización. Sin embargo, las operaciones de actualización en documentos no válidos fallan debido al validador. Para actualizar un documento no válido, primero debe resolver el problema que provoca el fallo del validador.
Especificar la validación de restricciones
El siguiente ejemplo actualiza la colección movies al nivel de validación constraint. Al actualizar al nivel constraint, MongoDB comprueba que todos los documentos que ya se encuentran en la colección cumplan con el validador.
Nota
El siguiente procedimiento se aplica a una colección que ya existe. Si establece validationLevel en constraint al crear la colección, no necesita establecer primero el nivel en strict ni preparar la colección.
(Condicional) Establezca su validationLevel en strict.
Si el validationLevel de su colección no es ya strict, siga el procedimiento para especificar una validación estricta.
Prepara la colección para el nivel constraint.
Ejecutar collMod con prepareConstraintValidationLevel configurado en true:
db.runCommand( { collMod: "movies", prepareConstraintValidationLevel: true } )
Este comando prepara la colección para la actualización bloqueando bypassDocumentValidation e impidiendo cambios en el validador.
Establezca el nivel de validación en constraint.
Ejecuta collMod para establecer validationLevel en constraint. El validationAction debe ser error o errorAndLog:
db.runCommand( { collMod: "movies", validationLevel: "constraint", validationAction: "error" } )
No se puede cambiar el nivel validator en la misma operación collMod que actualiza el nivel validationLevel a constraint. Configure las reglas de validación antes de ejecutar este comando. Para modificar las reglas posteriormente, reduzca el nivel a strict, modifique las reglas y, a continuación, actualice de nuevo a constraint.
Debido a que validationLevel es constraint, MongoDB aplica las reglas de validación a todas las inserciones y actualizaciones de documentos, independientemente de si un documento existente cumplía las reglas antes de la actualización.
Al establecer el nivel en constraint, MongoDB escanea todos los documentos existentes en la colección y la operación collMod falla si algún documento incumple el validador. Este escaneo puede resultar computacionalmente costoso para colecciones grandes. Si la operación falla, actualice los documentos que incumplen el validador antes de continuar.
Importante
La salida de errores está destinada al uso humano. Podría cambiar en el futuro y no debe dependerse de ello en scripts.