Overview
En esta guía, puede aprender a utilizar el controlador Rust para implementar la validación de esquema para sus colecciones de MongoDB.
Para implementar la validación de esquemas, debe proporcionar un esquema JSON que conste de un conjunto de reglas de validación. Si implementa la validación de esquemas, el servidor solo le permitirá ejecutar operaciones de escritura que cumplan las reglas de validación. Utilice la validación de esquemas para restringir los tipos de datos y los rangos de valores de los campos de documento en una colección específica.
Puede definir reglas de validación de esquema al crear una colección mediante métodos de controlador, o puede agregarlas a una colección existente mediante el uso de
collMod Comando de MongoDB. Esta guía solo describe cómo habilitar la validación de esquema al crear una colección. Para obtener más información sobre cómo habilitar la validación de esquema en colecciones existentes, consulte collMod en el manual del servidor.
Validación del esquema JSON
Antes de crear una colección con reglas de validación de esquema, debe definir un esquema JSON.
El esquema JSON es un objeto JSON que contiene pares clave-valor que especifican las reglas de validación para tu colección. A nivel superior, este objeto debe incluir un objeto $jsonSchema. El objeto $jsonSchema incluye los siguientes campos:
título: establece una descripción opcional para el esquema.
obligatorio: especifica una lista de campos obligatorios para cada documento de su colección.
propiedades: establece los requisitos de propiedad para campos individuales.
Para obtener una lista completa de los campos de objetos de esquema JSON, consulte Esquema JSON en el manual del servidor.
Implementar la validación de esquemas
Puedes implementar la validación de esquemas pasando tu esquema y las opciones relacionadas a los métodos para construir opciones de CreateCollectionOptions.
Nota
Opciones de configuración
Puede configurar los campos CreateCollectionOptions encadenando los métodos del generador de opciones directamente a la llamada al método create_collection(). Si utiliza una versión anterior del controlador, debe construir una instancia CreateCollectionOptions encadenando los métodos del generador de opciones al método builder().
Llame a los siguientes métodos CreateCollectionOptions para especificar las opciones de validación para la nueva colección:
Método | Descripción |
|---|---|
| Especifica reglas de validación para una colección pasando un esquema JSON. Para obtener más información, consulte la SecciónValidación de esquema JSON en esta página. |
| Especifica qué operaciones de inserción y actualización están sujetas a las reglas de validación. Possible values: |
| Especifica si el controlador genera un error o una advertencia si inserta documentos que no siguen las reglas de validación. Possible values: |
Ejemplo
Este ejemplo crea una colección llamada survey_answers con las siguientes especificaciones de validación:
El método
validator()recibe un esquema JSON que especifica que el campoansweren cada documento debe tener un valor de"yes"o"no".El método
validation_action()especifica si el driver genera unErrorcuando una operación de guardado viola una regla de validación.El método
validation_level()especifica que la validación esModerate, por lo que las reglas de validación se aplican solo a inserciones y actualizaciones en documentos válidos existentes.
let validator = doc! { "$jsonSchema": doc! { "bsonType": "object", "title": "Answer Value Validation", "properties": doc! { "answer": doc! { "enum": vec! [ "yes", "no" ], } } } }; db.create_collection("survey_answers") .validator(validator) .validation_action(ValidationAction::Error) .validation_level(ValidationLevel::Moderate) .await?;
Los siguientes documentos siguen las reglas de validación y se pueden insertar correctamente:
{ "_id": { ... }, "question": "Do you like to exercise?", "answer": "yes" }, { "_id": { ... }, "question": "Do you like to play computer games?", "answer": "no" }
Sin embargo, si intenta insertar el siguiente documento, el servidor genera un error porque el valor de answer no coincide con ninguna de las opciones válidas:
{ "_id": { ... }, "question": "Do you like to exercise?", "answer": "depends on my mood" }
Error: Error { kind: Write(WriteError(WriteError { code: 121, code_name: None, message: "Document failed validation", details: Some(Document({"failingDocumentId": ObjectId("..."), "details": Document({"operatorName": String("$jsonSchema"), "title": String("Answer Value Validation"), ... })})) })), ... }
Tip
Saltar la validación del esquema
Para omitir las reglas de validación de una colección, establezca el campo bypass_document_validation en true en el parámetro de opciones del método de escritura. Esto ignora las reglas de validación de la colección y cualquier excepción a las mismas definidas por validation_level.
Para ver un ejemplo de cómo especificar esta configuración en las opciones del insert_one() método, consulte la sección Modificar el comportamiento de insert_one de la guía Insertar documentos.
Información Adicional
Para obtener más información sobre las operaciones MongoDB Server mencionadas en esta página, consulta la siguiente documentación en el manual de servidor:
Documentación de la API
Para obtener más información sobre cómo configurar los niveles y acciones de validación, consulte la siguiente documentación de API:
nivel de validaciónpara el
validation_level()método auxiliarNivel de validación para posibles
validation_levelvaloresvalidation_action para el
validation_action()método auxiliarAcción de validación para posibles
validation_actionvalores
Para obtener más información sobre otros métodos o tipos a los que se hace referencia en esta guía, consulte la siguiente documentación: