Modelando Documentos C# para MongoDB: Atributos Essenciais

Este tutorial aborda como modelar 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. usando classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. C# e atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. que estabelecem o mapeamento correto para 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.. A ideia central é compreender como os objetos do domínio em C# podem ser convertidos (ou serializados) em documentos BSON no 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., mantendo a coerência e a flexibilidade que o MongoDB proporciona.

Visão Geral do Mapeamento de Classes para Documentos🔗

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. trabalhamos com 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. em MongoDB, cada documentoEntendendo 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. é um conjunto de pares chave🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.-valor armazenados em formato BSON. No C#, esses 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. podem ser representados por meio de classes. O driver do 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 .NET fornece atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. que controlam como cada propriedade⚡ 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. da classe será mapeada para um campo no documento BSON.

Alguns atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. importantes:

Estruturando uma Classe Básica🔗

Suponha que desejemos criar uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. Produto🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados., que será persistida em uma coleção do 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.. Eis um exemplo simples de como definir essa classe em C#:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
public class Produto
{
    [BsonId]
    public ObjectId Id { get; set; }
    [BsonElement("Nome")]
    public string Nome { get; set; }
    [BsonElement("Preco")]
    public decimal Preco { get; set; }
    [BsonElement("EmEstoque")]
    public bool EmEstoque { get; set; }
}

Análise do Exemplo

1. [BsonId] indica que a propriedade⚡ 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. Id é o identificador do documentoEntendendo 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.. O tipo ObjectId é uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. do driver 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..

2. [BsonElement("Nome")] faz com que o campo do documentoEntendendo 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. seja chamado "Nome", enquanto a propriedade⚡ 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. C# se chama Nome. Sem esse atributo, o campo no documento teria o mesmo nome da propriedade⚡ 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..

3. [BsonElement("Preco")] 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. [BsonElement("EmEstoque")] seguem a mesma lógica de mapeamento de nomes.

Caso não especifiquemos [BsonElement("CampoX")], o driver assumirá o mesmo nome da propriedade C#. No entanto, usar BsonElement traz mais clareza 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. se deseja um nome diferente ou manter uma convenção de nomenclatura diferente no banco e no código.

Atributos de Customização🔗

Além do [BsonElement], existem outros atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. úteis que enriquecem o mapeamento e tornam a modelagem mais poderosa:

AtributoFunção
[BsonRepresentation(BsonType.String)]Permite armazenar uma enumeração ou tipo numérico como texto em BSON. Exemplo: enumstring no documento.
[BsonIgnoreIfDefault]Se a propriedade estiver em seu valor padrão, ela não é salva no documento.
[BsonDefaultValue(valor)]Se não existir um campo correspondente no documento, é atribuído esse valor por padrão na desserialização.
[BsonIgnoreExtraElements]Faz com que campos extras no documento BSON (que não existam na classe) sejam ignorados, sem lançar exceções.
[BsonRequired]Gera erro se o campo não estiver presente no documento durante a desserialização, garantindo que a propriedade seja obrigatória.

Exemplo de Uso do [BsonRepresentation]

Uma situação comum é trabalhar com enumeradores (enum🧩 Enumerações: Dê Significado a Números com 'enum'!🧩 Enumerações: Dê Significado a Números com 'enum'!Descubra como as enumerações em C# eliminam números mágicos, melhoram a legibilidade e facilitam a manutenção do código, com exemplos claros e práticos.) em C#. Podemos desejar salvar cada valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. de enum🧩 Enumerações: Dê Significado a Números com 'enum'!🧩 Enumerações: Dê Significado a Números com 'enum'!Descubra como as enumerações em C# eliminam números mágicos, melhoram a legibilidade e facilitam a manutenção do código, com exemplos claros e práticos. como string📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. no documentoEntendendo 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 facilitar leituras e evitar confusões entre números inteiros:

public enum Categoria
{
    Alimento,
    Eletronico,
    Vestuario
}
public class Produto
{
    [BsonId]
    public ObjectId Id { get; set; }
    [BsonElement("Nome")]
    public string Nome { get; set; }
    [BsonRepresentation(BsonType.String)]
    public Categoria Categoria { get; set; }
    [BsonElement("Preco")]
    public decimal Preco { get; set; }
}

Com essa configuraçãoGerenciando 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., ao salvar uma instância no MongoDB, o campo Categoria aparecerá como uma string📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. em vez de um número inteiro.

Modelando Subdocumentos🔗

Em MongoDB, é comum ter campos aninhados (subdocumentosTrabalhando com dados semiestruturados e documentos aninhados em MongoDBTrabalhando com dados semiestruturados e documentos aninhados em MongoDBAprenda a gerenciar dados semiestruturados e subdocumentos no MongoDB com C#. Descubra truques essenciais e práticas recomendadas para produção.). No C#, podemos representar isso com classes embutidas ou classes separadas que atuam como propriedades da classe principal.

public class Endereco
{
    [BsonElement("Rua")]
    public string Rua { get; set; }
    [BsonElement("Cidade")]
    public string Cidade { get; set; }
}
public class Cliente
{
    [BsonId]
    public ObjectId Id { get; set; }
    [BsonElement("Nome")]
    public string Nome { get; set; }
    [BsonElement("EnderecoCompleto")]
    public Endereco EnderecoCompleto { get; set; }
}

Ao salvar um Cliente, 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. criará um subdocumento para EnderecoCompleto contendo os campos "Rua" e "Cidade". Isso reflete o poder dos documentos aninhadosTrabalhando com dados semiestruturados e documentos aninhados em MongoDBTrabalhando com dados semiestruturados e documentos aninhados em MongoDBAprenda a gerenciar dados semiestruturados e subdocumentos no MongoDB com C#. Descubra truques essenciais e práticas recomendadas para produção., facilitando o acesso e localização de dados.

Princípios de Boas Práticas🔗

1. Nomear atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. de forma clara: manter consistência dentro do projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes., usando [BsonElement] sempre que desejar um nome diferente do “default” do C#.

2. Evitar sobrescrita desnecessária: só use [BsonElement("...")] 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. realmente precisar de um nome diferente.

3. Gerenciar 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. ignoradas: use [BsonIgnore] ou [BsonIgnoreExtraElements] se algumas 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. não devem ser persistidas ou se deseja ignorar campos extras do documento.

4. Lidar com valores🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. padrão: o [BsonDefaultValue(valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.)] ajuda na desserialização, caso o documentoEntendendo 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. não contenha aquele campo.

5. Controlar a obrigatoriedade: [BsonRequired] lança erros 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. o campo está ausente, o que auxilia na integridade de dados em ambientes críticos.

Exemplo Completo🔗

A seguir, um exemplo que combina vários atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. para demonstrar modelos mais ricos:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson.Serialization.Options;
public enum TipoConta
{
    Corrente,
    Poupanca
}
[BsonIgnoreExtraElements]
public class ContaBancaria
{
    [BsonId]
    public ObjectId Id { get; set; }
    [BsonElement("Numero")]
    public string NumeroConta { get; set; }
    [BsonRepresentation(BsonType.String)]
    public TipoConta Tipo { get; set; }
    [BsonDefaultValue(0.0)]
    public double Saldo { get; set; }
    [BsonIgnoreIfDefault]
    public double Limite { get; set; }
}

Conclusão🔗

Criar modelos de 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. em C# significa refletir a estrutura do domínio em classes que serão convertidas em 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. BSON. O uso correto de atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. ([BsonId], [BsonElement], [BsonIgnore], etc.) permite adequar o formato do documento às necessidades 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. e da aplicação, garantindo flexibilidade e organização.

O ponto principal é: mantenha seus modelos🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. C# expressivos, usando atributos📜 Atributos Customizados: Metadados que Guiam seu Código!📜 Atributos Customizados: Metadados que Guiam seu Código!Descubra como atributos customizados potencializam a organização do código, facilitam auditorias e testes, e garantem eficiência. apenas quando necessário para corresponder às regras de negócio 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. aos requisitos do 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.. Assim, você constrói aplicações mais eficazes, garantindo a consistência entre o que é persistido no banco 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. o que é manipulado no código.

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, que aprofundam tópicos práticos e técnicas para integrar C# com MongoDB, complementando o conteúdo do tutorial: www.mongodb.com/developer/languages/csharp/
  • Documentação oficial do MongoDB, que fornece informações fundamentais sobre BSON, documentos e operações de banco de dados, essenciais para compreender o mapeamento de classes C# para documentos: www.mongodb.com/docs/
  • Driver oficial do MongoDB para C#, que contém exemplos, documentação e práticas recomendadas para utilizar os atributos e recursos discutidos no tutorial: github.com/mongodb/mongo-csharp-driver
  • Guia de C# na Microsoft Docs, útil para entender a sintaxe e os conceitos da linguagem, os quais são aplicados na definição de classes e atributos para modelar documentos: docs.microsoft.com/en-us/dotnet/csharp/

Compartilhar artigo