MongoDB no Azure: configuração e exemplo de uso com o .NET Core

Renato Groffe
May 8, 2017 · 7 min read

O objetivo deste artigo é demonstrar a configuração e o uso do MongoDB a partir do Microsoft Azure, além de apresentar um exemplo empregando esta solução em conjunto com o .NET Core.

E por falar em Azure, no dia 09/05/2017 (terça) às 21h30 - horário de Brasília - acontecerá mais um hangout do Canal .NET focando na plataforma de cloud computing Microsoft.

O assunto desta vez será a migração de aplicações monolíticas para uma arquitetura de microserviços utilizando o Azure, com a presença do Andre Baltieri (Microsoft MVP).

Para se inscrever e participar acesse esta página. A transmissão será via YouTube, em um link a ser divulgado em breve.


Introdução

Gratuito, multiplataforma, flexível e open source, o MongoDB é atualmente uma das soluções NoSQL mais utilizadas em projetos de software. Contribui muito para tal popularidade o fato das principais plataformas de desenvolvimento suportarem o MongoDB, tudo isto graças à existência de drivers que viabilizam o uso deste sistema de banco de dados por tecnologias como .NET, Node.js, Java, C++, Ruby, PHP e Python.

Além de estar presente em ambientes on-premise, o MongoDB também é oferecido como serviço na nuvem por diversos fornecedores.

No caso específico da Microsoft, repositórios do DocumentDB podem ser utilizados por aplicações baseadas no MongoDB sem maiores dificuldades. Isto acontece no Azure através de uma API de suporte ao MongoDB, bastando apenas modificar a string de conexão em aplicações que dependam deste NoSQL na nuvem.

As próximas seções abordam a configuração e o uso do MongoDB a partir do Microsoft Azure, incluindo um exemplo de aplicação criada com o .NET Core 1.1.


Criando uma conta no Azure para uso do MongoDB

A criação dos recursos necessários para uso do MongoDB na nuvem será feita através do portal do Microsoft Azure:

https://portal.azure.com/

Após a autenticação clicar sobre o item Novo:

Na sequência acionar a opção Databases e, por fim, Banco de dados como serviço para MongoDB:

Aparecerá neste momento o painel NoSQL (DocumentDB) - Database as a service for MongoDB, no qual será realizada a configuração de uma nova conta:

  • No campo ID foi informado o valor testemongodb;
  • Um novo grupo de recursos chamado MongoDBAzure também será criado;
  • Em Localização selecionar ainda o data center no qual serão gerados os recursos (Sul do Brasil).

Preenchidas estas definições acionar a opção Criar. Na opção Todos os recursos será possível constatar, após alguns segundos, a presença do recurso testemongodb:

Ao acessar o recurso testemongodb a opção Visão geral trará um painel no qual constarão os bancos de dados e coleções associados a esta conta (até o momento nenhuma estrutura foi criada):


Utilizando o MongoDB com o .NET Core

O exemplo detalhado neste artigo será uma Console Application (CargaCatalogo) criada com a versão 1.1 do .NET Core e com o Visual Studio 2017:

Adicionar os seguintes packages para a manipulação de configurações no formato JSON:

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.UserSecrets

Este projeto também fará uso da versão 2.4.3 do pacote MongoDB.Driver:

Acessar agora na conta testemongodb o item Cadeia de Conexão. Esta funcionalidade permitirá que se obtenham chaves de leitura/gravação e somente leitura para acesso a um banco de dados do MongoDB. Selecionar a opção Chaves de leitura/gravação:

A string que possibilitará a criação de um novo banco de dados e sua respectiva coleção está no campo CADEIA DE CONEXÃO:

Preencher este valor no item ConexaoCatalogo da seção MongoDB do arquivo appsettings.json (este último deverá ser adicionado ao projeto de testes):

Selecionar o arquivo appsettings.json no Solution Explorer e acessar então a janela Properties, preenchendo as seguintes configurações (com o objetivo de permitir que o arquivo seja copiado para ao se efetuar o build da aplicação):

  • Em Build Action certificar-se de que foi marcado o valor Content;
  • Em Copy to Output Directory especificar o valor Copy always.

O projeto descrito nesta seção fará o cadastramento de um catálogo de itens, nos quais constarão produtos e serviços comercializados por uma empresa hipotética. Para isto foram definidas as classes Fornecedor, Produto e Servico:

  • Uma das propriedades de Produto será uma instância do tipo Fornecedor;
  • A propriedade _id nas classes Produto e Servico corresponde ao identificador único de um documento, tendo sido declarada como do tipo ObjectId (namespace MongoDB.Bson). É importante ressaltar que esta é uma característica de qualquer documento criado no MongoDB, com o valor de _id sendo gerado automaticamente no momento da inclusão de um conjunto de dados.

No método Main da classe Program estão as instruções que criarão o banco de dados DBCatalogo e a coleção Catalogo, além de incluir documentos nesta última (referências de Produto e Servico):

  • Inicialmente será criada uma instância do tipo ConfigurationBuilder (namespace Microsoft.Extensions.Configuration), de forma a se configurar o uso do arquivo appsettings.json por meio do método AddJsonFile. Ao se invocar o método Build será obtida uma referência do tipo IConfigurationRoot (namespace Microsoft.Extensions.Configuration), que possibilitará o acesso à string para conexão ao MongoDB no Azure;
  • Em seguida será gerada então uma instância da classe MongoClient (namespace MongoDB.Driver), utilizando a string de conexão declarada no arquivo appsettings.json. Este objeto servirá de base para o acesso ao repositório do MongoDB criado no Microsoft Azure;
  • Uma referência a um banco de dados será obtida invocando o método GetDabase do objeto MongoClient; esta operação recebe como parâmetro o nome de uma base (DBCatalogo neste exemplo), trazendo como resultado uma instância do tipo IMongoDatabase (namespace namespace MongoDB.Driver);
  • Com a referência de IMongoDatabase será acionado o método GetCollection duas vezes, com este último recebendo como parâmetros a classe que representa um documento e o nome da coleção a ser manipulada. O retorno destas ações serão referências baseada na interface genérica IMongoCollection (namespace MongoDB.Driver), representadas pelas variáveis catalogoProdutos e catalogoServicos;
  • O método InsertOne será acionado duas vezes a partir do objeto vinculado a catalogoProdutos, incluindo assim dois novos documentos descrevendo produtos na coleção Catalogo. Procedimento similar acontecerá com a variável catalogoServicos.

Os fontes desta aplicação de exemplo estão disponíveis no seguinte repositório do GitHub:

https://github.com/renatogroffe/DotNetCore_MongoDB


Testes

O resultado da execução do projeto CargaCatalogo pode ser observado na próxima imagem:

De volta ao portal do Azure, ao se visualizar o recurso testemongodb, aparecerão a coleção Catalogo e o banco de dados DBCatalogo:

Na opção Gerenciador de Consultas será possível informar uma expressão SQL, a fim de listar os dados já cadastrados na coleção Catalogo. Este recurso é específico do DocumentDB, mas também disponível ao se utilizar o MongoDB no Azure. Acionar para isto o botão Executar Consulta:

Nas imagens a seguir estão listados os diversos documentos vinculados à coleção Catalogo, com os mesmos possuindo diferentes estruturas (fato que atesta a flexibilidade do MongoDB em termos de armazenamento de dados):

A coleção Catalogo também poderia ser visualizada em uma ferramenta para gerenciamento do MongoDB como o Robomongo:


Conclusão

Este artigo procurou enfatizar a facilidade em se utilizar o MongoDB no Azure, através do suporte que esta plataforma oferece por meio do

DocumentDB. Aplicações construídas em tecnologias como .NET, Node.js, Java, C++, Ruby, PHP e Python podem se valer de toda a praticidade oferecida pela Microsoft para uso do MongoDB na nuvem, com isto acontecendo a partir da simples mudança de uma string de conexão.

Em um próximo post darei continuidade a esta série, com um exemplo de uso dos recursos aqui criados em um projeto ASP.NET Core.


Renato Groffe

Written by

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade