Implementando Validação de Schema e BSON no MongoDB C#

Neste tutorial, vamos explorar como implementar validaçõesComo Assegurar Validação e Cobertura de Código em Projetos LINQComo Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. de schema em MongoDBO que é MongoDB e por que utilizá-lo com C# em 2025O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025. para garantir maior integridade nos dados, além de entender o uso de BSONConceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. e sua importância no ecossistema .NET. A proposta é mostrar as técnicas essenciais para que desenvolvedores, estudantes e profissionais de TI consigam validar e estruturar documentosEntendendo a arquitetura do MongoDB: documentos, coleções e bancos de dadosEntendendo a arquitetura do MongoDB: documentos, coleções e bancos de dadosExplore os pilares da arquitetura MongoDB, integrando bancos de dados, coleções e documentos para impulsionar seu desenvolvimento em C# até 2025. de maneira confiável e eficiente até 2025.

Visão Geral da Validação de Schema no MongoDB🔗

MongoDBO que é MongoDB e por que utilizá-lo com C# em 2025O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025. permite que você defina regras de validaçãoComo Assegurar Validação e Cobertura de Código em Projetos LINQComo Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. em nível de coleção. Diferentemente de um banco SQL, em que o schema é rigidamente imposto, no MongoDB a validaçãoComo Assegurar Validação e Cobertura de Código em Projetos LINQComo Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. de schema é opcional e configurável: é você quem decide o quão restritivo o schema será. Essa flexibilidade facilita a evolução do modelo de dados, ao mesmo tempo que evita inconsistências graves.

Em linhas gerais, a validaçãoComo Assegurar Validação e Cobertura de Código em Projetos LINQComo Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. de schema envolve:

O que é BSON e por que isso importa?🔗

O BSON (Binary JSONConceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025.) é o formato binário utilizado pelo MongoDB para armazenar documentos. Ele é importante no ecossistema C# por duas razões principais:

1. Serialização⚡ System.Text.Json 2.0: Serialização com Source Generators!⚡ System.Text.Json 2.0: Serialização com Source Generators!Descubra como os Source Generators do .NET 8 revolucionam a serialização JSON, proporcionando performance 5x mais rápida e menor uso de memória. eficiente: O driver oficial do MongoDBConfigurando o ambiente de desenvolvimento em .NET para MongoDBConfigurando o ambiente de desenvolvimento em .NET para MongoDBAprenda a preparar seu ambiente .NET para trabalhar com MongoDB, instalando o SDK, criando projetos comuns e adicionando o driver oficial. em C# converte objetos .NET para BSON de forma automática, mantendo tipos e estruturas internas.

2. Suporte a tipos avançados: É possível representar datas, arrays📦 Arrays: Armazene Dados como um Chef Organiza Panelas!📦 Arrays: Armazene Dados como um Chef Organiza Panelas!Aprenda como arrays em C# organizam dados com a precisão de uma cozinha profissional. Descubra métodos, boas práticas e dicas essenciais para seu código., objetos aninhados e até tipos exclusivos, como ObjectId.

Em projetos .NET, geralmente utilizamos atributos específicos para mapear propriedades⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. das classes aos campos BSON, como annotations do namespace MongoDBO que é MongoDB e por que utilizá-lo com C# em 2025O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025..Bson.Serialization.Attributes.

Por exemplo:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
public class Usuario
{
    [BsonId]
    public ObjectId Id { get; set; }
    [BsonElement("nome")]
    public string Nome { get; set; }
    [BsonElement("idade")]
    public int Idade { get; set; }
}

Essas anotações permitem não apenas configurar nomes de campos e chaves primárias, mas também indicar quais campos serão ignorados ou tratados de maneira especial durante a serialização⚡ System.Text.Json 2.0: Serialização com Source Generators!⚡ System.Text.Json 2.0: Serialização com Source Generators!Descubra como os Source Generators do .NET 8 revolucionam a serialização JSON, proporcionando performance 5x mais rápida e menor uso de memória..

Configurando a Validação de Schema🔗

Assim que definimos nossas classes, podemos configurarInstalando e configurando o MongoDB no Windows e Linux para uso com C#Instalando e configurando o MongoDB no Windows e Linux para uso com C#Aprenda a instalar e configurar o MongoDB no Windows e Linux, integrando-o com projetos C# para ambientes de desenvolvimento eficientes. a validação do schema diretamente no MongoDB. Ao criar ou atualizar uma coleção, podemos especificar um validator:

using MongoDB.Driver;
using MongoDB.Bson;
public class ConfiguracaoDb
{
    private readonly IMongoDatabase _database;
    public ConfiguracaoDb()
    {
        var client = new MongoClient("mongodb://localhost:27017");
        _database = client.GetDatabase("ExemploValidador");
    }
    public void CriarColecaoComValidador()
    {
        var command = new BsonDocument
        {
            { "collMod", "Usuarios" },
            { "validator", new BsonDocument
                {
                    { "$jsonSchema", new BsonDocument
                        {
                            { "bsonType", "object" },
                            { "required", new BsonArray { "nome", "idade" } },
                            { "properties", new BsonDocument
                                {
                                    { "nome", new BsonDocument
                                        {
                                            { "bsonType", "string" },
                                            { "description", "Nome é obrigatório e deve ser string" }
                                        }
                                    },
                                    { "idade", new BsonDocument
                                        {
                                            { "bsonType", "int" },
                                            { "minimum", 18 },
                                            { "description", "Idade deve ser um número inteiro >= 18" }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            { "validationLevel", "strict" },
            { "validationAction", "error" }
        };
        _database.RunCommand<BsonDocument>(command);
    }
}

Explicação do Exemplo

Ao estipular essas regras, garantimos que as propriedades⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. nome e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. idade sempre sejam gravadas corretamente, evitando dados corrompidos ou fora do padrão.

Integrando Validações com Classes em C#🔗

Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. utilizamos drivers .NET para MongoDB, as validações ocorrem do lado do banco de dadosConceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025.. Ainda assim, podemos reforçar a consistência usando Data Annotations do .NET para validar no lado servidor (antes de enviar ao MongoDBO que é MongoDB e por que utilizá-lo com C# em 2025O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025.). Por exemplo:

using System.ComponentModel.DataAnnotations;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
public class Usuario
{
    [BsonId]
    public ObjectId Id { get; set; }
    [Required(ErrorMessage = "Nome é obrigatório.")]
    [MinLength(3, ErrorMessage = "Nome deve ter pelo menos 3 caracteres.")]
    public string Nome { get; set; }
    [Range(18, 120, ErrorMessage = "A idade deve ser entre 18 e 120 anos.")]
    public int Idade { get; set; }
}

Com isso, caso alguém tente criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um Usuario com idade menor que 18, teremos dois níveis de proteção🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real.:

1. ValidaçãoComo Assegurar Validação e Cobertura de Código em Projetos LINQComo Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. no código C# (usando Data Annotations) – falha antes do envio.

2. ValidaçãoComo Assegurar Validação e Cobertura de Código em Projetos LINQComo Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. na coleção (usando JSON Schema) – falha no banco se o primeiro nível for🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! contornado.

Boas Práticas para Integridade dos Dados🔗

1. Use validadores para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! campos críticos: Mesmo que o MongoDBO que é MongoDB e por que utilizá-lo com C# em 2025O que é MongoDB e por que utilizá-lo com C# em 2025Descubra como MongoDB e C# unem flexibilidade e escalabilidade para criar soluções modernas e eficientes em um cenário NoSQL inovador em 2025. seja flexível, para dados essenciais, configure regras de schema mais restritas (tipos, limites mínimos e máximos etc.).

2. Combine validaçãoComo Assegurar Validação e Cobertura de Código em Projetos LINQComo Assegurar Validação e Cobertura de Código em Projetos LINQAprenda estratégias avançadas para testar consultas LINQ, garantindo cobertura de código e confiabilidade com ferramentas e práticas recomendadas. no client e no server: Prevenir problemas no código C# (camada de aplicação) e também no lado do banco é uma forma de reforçar a segurança🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real..

3. Mantenha a compatibilidade🧠 Memory Management Avançado: Domine Span<T> e MemoryMarshal!🧠 Memory Management Avançado: Domine Span<T> e MemoryMarshal!Transforme seu código C# usando Span<T> e MemoryMarshal para manipulação eficiente de memória, reduzindo alocações desnecessárias e elevando a performance.: Caso precise alterar o schema no futuro, faça alterações graduais, garantindo que códigos mais antigos ainda funcionem.

4. Documente seus validadores: Se a equipe crescer, todos precisam saber como a coleçãoEntendendo a arquitetura do MongoDB: documentos, coleções e bancos de dadosEntendendo a arquitetura do MongoDB: documentos, coleções e bancos de dadosExplore os pilares da arquitetura MongoDB, integrando bancos de dados, coleções e documentos para impulsionar seu desenvolvimento em C# até 2025. foi configurada.

Exemplo de Operação com Validação🔗

Suponha que tenhamos configurado a coleçãoEntendendo a arquitetura do MongoDB: documentos, coleções e bancos de dadosEntendendo a arquitetura do MongoDB: documentos, coleções e bancos de dadosExplore os pilares da arquitetura MongoDB, integrando bancos de dados, coleções e documentos para impulsionar seu desenvolvimento em C# até 2025. para exigir nome e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. idade >= 18. Se tentarmos inserir:

public async Task InserirUsuarioInvalido()
{
    var client = new MongoClient("mongodb://localhost:27017");
    var database = client.GetDatabase("ExemploValidador");
    var usuarios = database.GetCollection<Usuario>("Usuarios");
    var usuarioInvalido = new Usuario
    {
        Nome = "J",
        Idade = 16
    };
    await usuarios.InsertOneAsync(usuarioInvalido);
}

Dependendo das configuraçõesGerenciando Secrets e Configs em Docker SwarmGerenciando Secrets e Configs em Docker SwarmAprenda a proteger credenciais, chaves e tokens com Docker Swarm. Gerencie Secrets e Configs de forma segura, garantindo integridade dos dados críticos. de validação e Data Annotations, essa ação provavelmente resultará em erro🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades., impedindo que dados fora do padrão sejam gravados.

Considerações Finais🔗

Essas práticas ajudam a preservar a qualidade dos dados e a minimizar retrabalho, principalmente em projetos de grande porte que exigem escalabilidade📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e consistência ao longo do tempo.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

  • Artigos para desenvolvedores C# no MongoDB Developer Hub – Fornece conteúdos complementares e melhores práticas para integrar MongoDB com aplicações .NET, enfatizando a importância das validações de schema e do uso do BSON: www.mongodb.com/developer/languages/csharp/
  • Documentação oficial do MongoDB – Essencial para entender a definição de validadores e a implementação de validações de schema e BSON: www.mongodb.com/docs/
  • Driver oficial do MongoDB para C# no GitHub – Fundamental para a implementação e entendimento da serialização BSON e mapeamento de classes C# para documentos MongoDB: github.com/mongodb/mongo-csharp-driver
  • Guia de C# na Microsoft Docs – Relevante para os exemplos de código e para aprofundamento na linguagem durante o desenvolvimento de integrações com MongoDB: docs.microsoft.com/en-us/dotnet/csharp/
  • Introdução ao .NET na Microsoft Docs – Útil para contextualizar o uso do ecossistema .NET no exemplo e na integração com MongoDB: docs.microsoft.com/pt-br/dotnet/

Compartilhar artigo

Artigos Relacionados