Guia Prático: Atualizações MongoDB em C# - Parciais e Totais

Este tutorial tem como objetivo apresentar como realizar atualizações parciais 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. totais 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. do MongoDB utilizando C#, abordando conceitos básicos e exemplos práticos que ajudarão no dia a dia de desenvolvedores, estudantes e profissionais de TI interessados em aprimorar conhecimentos de NoSQLConceitos 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 C# no ecossistema .NET até 2025.

Conceitos Fundamentais de Update no MongoDB🔗

No MongoDB, as alterações 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. podem ser classificadas em parciais (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. apenas campos selecionados são modificados) e totais (quando todo 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. é substituído).

1. Atualizações Parciais

2. Atualizações Totais

Abaixo, detalharemos como realizar cada tipo de atualização utilizando o driver 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. para C#.

Preparando o Ambiente de Desenvolvimento🔗

Para acompanhar o código de exemplo🚀 Scale Out com Redis: Atenda Milhões de Conexões!🚀 Scale Out com Redis: Atenda Milhões de Conexões!Integre o Redis com SignalR no .NET e distribua mensagens entre servidores, alcançando escalabilidade e alta performance em tempo real., assumimos que você já possua:

No arquivo .csproj, você deve ter algo semelhante a:

<ItemGroup>
    <PackageReference Include="MongoDB.Driver" Version="2.19.0" />
</ItemGroup>

Criando uma Classe de Exemplo🔗

Imagine que temos 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. que representa um 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., com 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. comuns como Id, Nome, Preco e uma lista📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. de Tags.

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("tags")]
    public List<string> Tags { get; set; } = new List<string>();
}

Obtendo a Coleção no MongoDB🔗

Para realizar as operações de atualização, precisamos instanciar o cliente, acessar o 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, por último, a coleção de Produtos🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio.. Um exemplo simplificado seria:

using MongoDB.Driver;
// String de conexão com o MongoDB
var connectionString = "mongodb://localhost:27017";
// Criar o cliente MongoDB
var client = new MongoClient(connectionString);
// Acessar o banco de dados
var database = client.GetDatabase("LojaDB");
// Obter a coleção
var colecaoProdutos = database.GetCollection<Produto>("Produtos");

Atualizações Parciais🔗

Atualizando Campo Único com $set

A forma mais comum de realizar uma atualização parcial📡 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. é através do operador $set⚡ 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., que define ou altera o 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 um campo específico.

// Exemplo: atualizar o preço de um produto específico
var filtro = Builders<Produto>.Filter.Eq(p => p.Nome, "Caneta Azul");
var atualizacao = Builders<Produto>.Update.Set(p => p.Preco, 2.99m);
var resultado = await colecaoProdutos.UpdateOneAsync(filtro, atualizacao);
// Verificando se algum documento foi modificado
if (resultado.ModifiedCount > 0)
{
    Console.WriteLine("Preço atualizado com sucesso!");
}
else
{
    Console.WriteLine("Nenhum documento foi atualizado.");
}

Neste exemplo:

1. Filtro🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio.: buscou-se 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. cujo Nome seja Caneta Azul.

2. Atualização: aplicou-se $set⚡ 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. no campo Preco, modificando apenas esse campo.

3. UpdateOneAsync: atualiza o primeiro 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. que corresponde ao filtro.

Incrementando Valores com $inc

Outro operador muito útil é o $inc, que incrementa (ou decrementa, caso seja um 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. negativo) o conteúdo de um campo numérico.

// Exemplo: aumentar o preço de todos os produtos com tag "Promoção"
var filtroPromocao = Builders<Produto>.Filter.AnyEq(p => p.Tags, "Promoção");
var atualizacaoPromo = Builders<Produto>.Update.Inc(p => p.Preco, 1.00m);
var resultadoPromo = await colecaoProdutos.UpdateManyAsync(filtroPromocao, atualizacaoPromo);
Console.WriteLine($"{resultadoPromo.ModifiedCount} documentos foram incrementados.");

Adicionando Valores em Arrays com $push

Para adicionar📦 List<T>: Dinamismo além dos Arrays!📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. elementos em um array, utilizamos o $push:

// Exemplo: adicionar a tag "Oferta" em um produto específico
var filtroOferta = Builders<Produto>.Filter.Eq(p => p.Nome, "Caneta Azul");
var atualizacaoOferta = Builders<Produto>.Update.Push(p => p.Tags, "Oferta");
var resultadoOferta = await colecaoProdutos.UpdateOneAsync(filtroOferta, atualizacaoOferta);
Console.WriteLine($"{resultadoOferta.ModifiedCount} documento(s) recebeu(ra)m a nova tag 'Oferta'.");

Atualizações Totais🔗

Para substituir📡 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. todo 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., é possível utilizar o método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. ReplaceOneAsync. Diferentemente dos operadores $set⚡ 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., $inc, $push, etc., o ReplaceOneAsync requer um objeto completo que substitua o existente:

// Exemplo: preparando um objeto produto totalmente novo
var novoProduto = new Produto
{
    Id = ObjectId.GenerateNewId(),
    Nome = "Lápis Preto",
    Preco = 1.49m,
    Tags = new List<string> { "Escola", "Arte" }
};
// Filtro para identificar o produto que será substituído
var filtroSubstituicao = Builders<Produto>.Filter.Eq(p => p.Nome, "Caneta Azul");
// Substitui completamente o documento anterior pelo novoProduto
var resultadoSubstituicao = await colecaoProdutos.ReplaceOneAsync(filtroSubstituicao, novoProduto);
// Verifica se a substituição ocorreu
if (resultadoSubstituicao.ModifiedCount > 0)
{
    Console.WriteLine("Documento substituído com sucesso.");
}
else
{
    Console.WriteLine("Nenhum documento foi substituído.");
}

Nesse cenário:

1. Cria-se um novo 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. (repare que até mesmo o Id é diferente).

2. Usa-se ReplaceOneAsync, que sobrescreve completamente 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. filtrado.

Boas Práticas e Dicas🔗

1. Escolha entre $set⚡ 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. e ReplaceOne:

Se você precisa modificar apenas alguns campos, prefira $set⚡ 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. (ou outros operadores). Já se 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. precisa ser reescrito por completo, utilize o ReplaceOneAsync.

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. de Dados:

Garanta que 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. que você está substituindo contenha todos os campos obrigatórios, pois a atualização total irá sobrescrever inteiramente o registro anterior.

3. Versões de Schema:

Ao longo do tempo, o schema do seu documento pode evoluir. Certifique-se de revisar 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. ao fazer atualizações completas para não sobrescrever campos que foram adicionados em versões mais recentes.

4. Utilize o UpdateOne vs🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!Prepare seu ambiente de desenvolvimento com o Visual Studio em uma aventura C#. Este tutorial prático ensina a instalar, configurar e personalizar sua IDE.. UpdateMany Apropriadamente:

5. Eficiência⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs. em Grandes Volumes:

Conclusão🔗

A capacidade de realizar atualizações parciais 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. totais 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. com MongoDB e C# torna o desenvolvimento ágil e eficiente. Enquanto as atualizações parciais permitem ajustes minuciosos, as atualizações totais simplificam cenários em que a substituição completa do documento é mais prática. Com uma compreensão sólida dos operadores de atualização e dos métodos disponíveis no 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. para C#, você estará preparado para lidar com uma ampla variedade de situações de alteração de dados, mantendo performance, 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 facilidade de manutenção conforme o desenvolvimento evolui até 2025.

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

Referências🔗

Compartilhar artigo