Después de añadir la validación de esquema a una colección, puede modificar las reglas de validación en cualquier momento. Por ejemplo, puede decidir:
Que documenta en un
usersLa colección ya no requiere una dirección de correo electrónico.Para aumentar la longitud mínima de un campo
passwordde 8 caracteres a 12.
Para modificar la validación del esquema de una colección, utilice el collMod Comando y especifique la validación actualizada en el validator objeto.
Acerca de esta tarea
Puede modificar todos los componentes de una validación de esquema, incluidas sus reglas, nivel de validación y acción de validación.
Si actualiza las reglas de validación de una colección, es posible que los documentos insertados antes del cambio de validación ya no sean válidos. La forma en que MongoDB gestiona estos documentos no válidos depende de su validationLevel. De forma predeterminada, MongoDB aplica comprobaciones de validación a todos los documentos, independientemente de cuándo se insertaron.
Pasos
El siguiente procedimiento crea una colección con reglas de validación y luego modifica esas reglas.
Crea una colección con validación.
Cree una colección users con reglas de validación:
db.createCollection("users", { validator: { $jsonSchema: { bsonType: "object", required: [ "username", "password" ], properties: { username: { bsonType: "string", description: "must be a string and is required" }, password: { bsonType: "string", minLength: 8, description: "must be a string at least 8 characters long, and is required" } } } } } )
Modifica el esquema de validación.
Ejecute el siguiente comando para cambiar collMod el minLength del password campo 8 de 12 a:
db.runCommand( { collMod: "users", validator: { $jsonSchema: { bsonType: "object", required: [ "username", "password" ], properties: { username: { bsonType: "string", description: "must be a string and is required" }, password: { bsonType: "string", minLength: 12, description: "must be a string of at least 12 characters, and is required" } } } } } )
Tip
También puede utilizar el comando collMod para agregar validación a una colección existente que no se creó con validación.
Resultados
Las siguientes secciones muestran los resultados de la validación actualizada en estos escenarios:
Cuando inserta un documento no válido.
Cuando se inserta un documento válido.
Cuando un documento previamente válido deja de ser válido debido a cambios en las reglas de validación.
Insertar un documento no válido
La siguiente operación intenta insertar un documento no válido. El documento no es válido porque el campo password tiene 10 caracteres cuando la longitud mínima es 12:
db.users.insertOne( { "username": "salesAdmin01", "password": "kT9$j4wg#M" } )
MongoDB devuelve el siguiente error:
MongoServerError: Document failed validation Additional information: { failingDocumentId: ObjectId("62be0adb73c105dde9231299"), details: { operatorName: '$jsonSchema', schemaRulesNotSatisfied: [ { operatorName: 'properties', propertiesNotSatisfied: [ { propertyName: 'password', description: 'must be a string of at least 8 characters, and is required', details: [ { operatorName: 'minLength', specifiedAs: { minLength: 12 }, reason: 'specified string length was not satisfied', consideredValue: 'kT9$j4wg#M' } ] } ] } ] } }
Insertar un documento válido
La siguiente operación inserta un documento válido, donde el campo password tiene al menos 12 caracteres de longitud:
db.users.insertOne( { "username": "salesAdmin01", "password": "8p&SQd7T90$KKx" } )
Manejar un documento previamente válido que ya no es válido
Considere el siguiente documento que es válido para la primera versión de la validación del esquema, pero no para la segunda:
db.users.insertOne( { "username": "salesAdmin02", "password": "i8U60*VyL8" } )
El campo password del documento tiene 10 caracteres. La primera versión de la validación del esquema requería un mínimo de 8 caracteres, lo que significaba que este documento era válido. Sin embargo, tras actualizar la validación para exigir que el campo password tenga un mínimo de 12 caracteres, el documento ya no es válido.
Cuando un cambio en la validación del esquema hace que documentos previamente válidos dejen de ser válidos, los documentos recientemente inválidos permanecen en la colección.
La forma en que MongoDB gestiona los documentos recientemente inválidos depende del validationLevel del esquema. En este ejemplo, la validación del esquema utiliza el valor predeterminado validationLevel o strict, lo que significa que el documento debe cumplir con las nuevas reglas de validación. MongoDB comprueba la validación cada vez que se actualiza el documento.
Si la validación del esquema actualizado tuviera un validationLevel de moderate, este documento no necesitaría coincidir con las nuevas reglas de validación.