Introdução
Neste laboratório, você aprenderá os fundamentos da validação de dados no MongoDB. A validação de dados é um recurso crucial que ajuda a manter a integridade e a consistência dos seus dados, garantindo que todos os documentos em uma coleção sigam uma estrutura e regras específicas. Você aprenderá a criar coleções com regras de validação, testar essas regras tentando inserir dados válidos e inválidos, e modificar regras de validação em uma coleção existente. Ao final deste laboratório, você será capaz de impor a qualidade dos dados diretamente em seu banco de dados MongoDB.
Criar uma Coleção com Validação de Esquema
Nesta primeira etapa, você se conectará ao servidor MongoDB e criará uma nova coleção com regras de validação específicas. Essas regras definirão os tipos de dados esperados e as restrições para os campos em seus documentos.
Primeiro, abra o MongoDB Shell (mongosh) para interagir com seu banco de dados. Este shell interativo é sua principal ferramenta para gerenciar o MongoDB.
mongosh
Uma vez dentro do shell, você verá um prompt como test>. Isso indica que você está conectado ao banco de dados padrão test. Vamos criar e alternar para um novo banco de dados chamado dataValidationLab.
use dataValidationLab
Agora, vamos criar uma coleção users. Ao criar a coleção, incluiremos um documento validator que usa $jsonSchema para definir nossas regras.
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "age", "email"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
age: {
bsonType: "int",
minimum: 18,
description: "must be an integer >= 18 and is required"
},
email: {
bsonType: "string",
pattern: "^.+@.+$",
description: "must be a valid email address and is required"
}
}
}
}
});
Após executar o comando, você deverá ver uma saída indicando sucesso:
{ "ok": 1 }
Vamos detalhar o validador:
bsonType: "object": A raiz do documento deve ser um objeto.required: ["name", "age", "email"]: Os camposname,ageeemaildevem estar presentes em todos os documentos.properties: Este objeto define as regras para campos individuais.name: Deve ser umastring.age: Deve ser umint(inteiro) com um valorminimumde 18.email: Deve ser umastringque corresponda à expressão regularpattern, que verifica um formato básico de e-mail.
Você agora criou com sucesso uma coleção com regras de validação de dados. Na próxima etapa, você testará essas regras.
Testar a Validação Inserindo Documentos
Agora que sua coleção users possui regras de validação, vamos testá-las. Você tentará inserir vários documentos: alguns que violam as regras e um que as cumpre. Isso o ajudará a entender como o MongoDB impõe o esquema.
Primeiro, vamos tentar inserir um documento com um tipo de dado incorreto para o campo age. Forneceremos uma string "25" em vez de um inteiro.
db.users.insertOne({
name: "John Doe",
age: "25",
email: "john.doe@example.com"
});
Esta operação falhará. O MongoDB rejeitará o documento e retornará um WriteError porque o campo age não atende ao requisito bsonType: "int". A mensagem de erro conterá detalhes sobre a falha na validação.
MongoServerError: Document failed validation
Em seguida, vamos tentar inserir um documento que está faltando um campo obrigatório, email.
db.users.insertOne({
name: "Jane Doe",
age: 30
});
Isso também falhará porque o campo email está listado no array required em nosso validador. Você receberá um WriteCommandError semelhante.
Finalmente, vamos inserir um documento que segue todas as regras. O name e o email são strings, e o age é um inteiro maior ou igual a 18.
db.users.insertOne({
name: "Alice",
age: 28,
email: "alice@example.com"
});
Desta vez, o comando será bem-sucedido, e você verá uma mensagem de confirmação com o _id do documento recém-inserido.
{
"acknowledged": true,
"insertedId": ObjectId("...")
}
Para confirmar que o documento válido foi adicionado, você pode consultar a coleção.
db.users.find();
A saída mostrará o único documento que passou com sucesso na validação.
[
{
"_id": ObjectId("..."),
"name": "Alice",
"age": 28,
"email": "alice@example.com"
}
]
Modificar um Validador Existente
Os requisitos da sua aplicação podem mudar ao longo do tempo, e você pode precisar atualizar suas regras de validação. Nesta etapa, você aprenderá como modificar o validador de uma coleção existente usando o comando collMod e, em seguida, testar as novas regras.
Vamos supor que queremos adicionar um novo campo status à nossa coleção users. Este campo deve ser uma string e só pode ter um de dois valores: "active" ou "inactive".
Usamos o comando collMod (collection modify) para aplicar o novo validador.
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "age", "email", "status"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
age: {
bsonType: "int",
minimum: 18,
description: "must be an integer >= 18 and is required"
},
email: {
bsonType: "string",
pattern: "^.+@.+$",
description: "must be a valid email address and is required"
},
status: {
enum: ["active", "inactive"],
description: "can only be one of the enum values and is required"
}
}
}
}
});
O comando retornará { "ok": 1 } em caso de sucesso. Atualizamos agora o validador para exigir o campo status e restringir seu valor usando a palavra-chave enum.
Agora, vamos testar a nova regra. Tente inserir um documento com um status inválido.
db.users.insertOne({
name: "Bob",
age: 45,
email: "bob@example.com",
status: "pending"
});
Isso falhará porque "pending" não está na lista enum para o campo status. Em seguida, insira um documento que esteja em conformidade com as regras atualizadas.
db.users.insertOne({
name: "Bob",
age: 45,
email: "bob@example.com",
status: "active"
});
Esta inserção será bem-sucedida. Para ver todos os documentos em sua coleção, execute find() novamente.
db.users.find();
Agora você verá os documentos de Alice e Bob. Observe que o documento de Alice, inserido antes da alteração da regra, não possui o campo status. Por padrão, a validação não se aplica a documentos existentes até que eles sejam modificados.
Resumo
Neste laboratório, você aprendeu as técnicas essenciais para implementar a validação de dados no MongoDB. Você começou criando uma coleção com um validador $jsonSchema para impor tipos de dados, campos obrigatórios e restrições de valor. Em seguida, testou essas regras tentando inserir documentos inválidos e válidos, observando como o MongoDB rejeita dados que não estão em conformidade com o esquema. Finalmente, você aprendeu como modificar as regras de validação para uma coleção existente usando o comando collMod para se adaptar a novos requisitos. Essas habilidades são fundamentais para construir aplicações robustas e manter alta qualidade de dados em seus bancos de dados MongoDB.

