Visão geral
Neste guia, você pode aprender como usar o driver Rust para implementar a validação de esquema para suas coleções MongoDB.
Para implementar a validação de esquema, você deve fornecer um JSON schema que consista em um conjunto de regras de validação. Se você implementar a validação de esquema, o servidor só permitirá que você execute operações de gravação que seguem as regras de validação. Use a validação de esquema para restringir tipos de dados e intervalos de valores de campos de documento em uma coleção especificada.
Você pode definir regras de validação de esquema ao criar uma collection usando métodos de driver ou pode adicioná-las a uma collection existente usando o comando collMod
do MongoDB. Este guia descreve apenas como habilitar a validação do esquema ao criar uma coleção. Para saber mais sobre como ativar a validação de esquema em coleções existentes, consulte collMod no manual do servidor MongoDB.
Validação de JSON schema
Antes de criar uma coleção com regras de validação de esquema, você deve definir um JSON schema.
O JSON schema é um objeto JSON que contém pares de valores-chave que especificam as regras de validação para sua coleção. No nível superior, este objeto deve incluir um objeto $jsonSchema
. O objeto $jsonSchema
inclui os seguintes campos:
title: define uma descrição opcional para o esquema.
obrigatório: especifica uma lista de campos obrigatórios para cada documento da sua collection.
propriedades: define os requisitos de propriedades para campos individuais.
Para obter uma lista completa dos campos de objeto de JSON schema , consulte JSON schema no manual do servidor MongoDB.
Implementar validação de esquema
Você pode implementar a validação de esquema passando seu esquema e opções relacionadas em uma instância do CreateCollectionOptions
para o método create_collection()
. Você pode construir uma instância do CreateCollectionOptions
utilizando o método CreateCollectionOptions::builder()
.
Observação
Opções de Instanciação
O driver Rust implementa o padrão de design Builder para a criação de muitos tipos diferentes, incluindo CreateCollectionOptions
. Você pode usar o método builder()
de cada tipo para construir uma instância de opções encadeando as funções do construtor de opções, uma de cada vez.
Chame as seguintes funções do CreateCollectionOptions::builder()
para especificar as opções de validação para a nova collection:
Método | Descrição |
---|---|
| Especifica as regras de validação para uma collection passando um JSON schema. Para obter mais informações, consulte a seção Validação de JSON schema nesta página. |
| Especifica quais operações de inserção e atualização estão sujeitas às regras de validação. Valores possíveis: |
| Especifica se o driver lança um erro ou um aviso se você inserir documentos que não sigam as regras de validação. Valores possíveis: |
Exemplo
Este exemplo cria uma collection chamada survey_answers
com as seguintes especificações de validação:
O método
validator()
recebe um JSON schema especificando que o campoanswer
em cada documento deve ter um valor de"yes"
ou"no"
.O método
validation_action()
especifica se o driver gera umError
quando uma operação de gravação viola uma regra de validação.O método
validation_level()
especifica que a validação éModerate
, portanto, as regras de validação se aplicam somente a inserções e atualizações em documentos válidos existentes.
let validator = doc! { "$jsonSchema": doc! { "bsonType": "object", "title": "Answer Value Validation", "properties": doc! { "answer": doc! { "enum": vec! [ "yes", "no" ], } } } }; let validation_opts = CreateCollectionOptions::builder() .validator(validator) .validation_action(Some(ValidationAction::Error)) .validation_level(Some(ValidationLevel::Moderate)) .build(); db.create_collection("survey_answers", validation_opts).await?;
Os seguintes documentos seguem as regras de validação e podem ser inseridos com sucesso:
{ "_id": { ... }, "question": "Do you like to exercise?", "answer": "yes" }, { "_id": { ... }, "question": "Do you like to play computer games?", "answer": "no" }
No entanto, se você tentar inserir o seguinte documento, o servidor gerará um erro porque o valor de answer
não corresponde a nenhuma das opções 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"), ... })})) })), ... }
Dica
Ignorar validação de esquema
Para ignorar as regras de validação de uma coleção, defina o campo bypass_document_validation
como true
no parâmetro de opções do método de escrita. Isso ignora quaisquer regras de validação na coleção e quaisquer isenções delas definidas pelo validation_level
.
Para ver um exemplo de como especificar essa configuração nas opções do método insert_one()
, consulte a seção Modificar comportamento insert_one do guia Inserir documentos.
Informações adicionais
Para saber mais sobre as operações do MongoDB Server mencionadas nesta página, consulte a seguinte documentação no manual do servidor MongoDB:
Documentação da API
Para saber mais sobre como definir níveis de validação e ações, consulte a seguinte documentação da API:
validation_level para o
validation_level()
método assistenteValidationLevel para possíveis
validation_level
valoresvalidation_action para o
validation_action()
método assistente doValidationAction para possíveis
validation_action
valores
Para saber mais sobre quaisquer outros métodos ou tipos referenciados neste guia, consulte a seguinte documentação: