.NET - MongoDB - Executando consultas com LINQ
Em meu artigo .NET - Apresentando e usando o MongoDB eu dei uma visão geral sobre o MongoDB, sua instalação e utilização na plataforma .NET.
Nesta dica eu mostro como podemos executar consultas LINQ com MongoDB.
Então vamos lá...
Recursos usados neste artigo:
Com o MongoDB e o driver MongoDB C# Driver (server também para VB .NET) devidamente instalados vamos criar um projeto desta vez usando a linguagem C# e mostrar com executar consultas LINQ.
Atenção !!!
Lembre-se de executar o MongoDB para atender as requisições.
Navegue até a pasta onde você instalou o MongoDB e abra o diretório bin e execute o arquivo mongod.exe
Abaixo vemos isso sendo feito via prompt de comando;
Usando o MongoDB em um projeto C# com consultas LINQ
Abra o Visual Studio Express 2012 for desktop e no menu FILE clique em New Project;
Selecione o template C# -> Windows -> Windows Forms Application e informe nome MongoDB_Linq e clique no botão OK.
Clique com o botão direito sobre o nome do projeto e selecione Add Reference;
Clique em Browse e localize a pasta onde você instalou o driver C# do MongoDB;
Selecione os arquivos MongoDB.Boson.dll e MongoDB.Driver.dll e clique em Add;
Clique com o botão direito sobre o nome do projeto e selecione Add Reference;
Vamos incluir uma referência ao namespace System.Configuration clicando na guia Assemblies e marcando a opção conforme abaixo:
Abra o arquivo App.Config e inclua a definição da string de conexão usada para o MongoDB. Na minha máquina local a conexão esta sendo feita em localhost porta 27017:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="stringConexaoMongoDB" value="Server=localhost:27017"/> </appSettings> </configuration> |
No menu PROJECT clique em Add Class e informe o nome Contatos.cs. A seguir defina o código da classe Contato conforme abaixo:
using MongoDB.Bson; namespace MongoDB_Linq { class Contato { public ObjectId Id { get; set; } public string Nome { get; set; } public string Email { get; set; } public int Idade { get; set; } } } |
No menu PROJECT clique em Add Class e informe o nome AcessoMongo.cs. Esta classe será responsável pelo acesso ao MongoDB.
A seguir defina o código da classe conforme abaixo:
using System; using System.Collections.Generic; using System.Linq; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Linq; using System.Configuration; namespace MongoDB_Linq { public class AcessoMongo { static Contato _contato; public static string ConnectionString { get { return ConfigurationManager.AppSettings["stringConexaoMongoDB"]; } } public void CriarDados() { CriarContatos(); } public void CriarContato(string nome, string email, int idade) { MongoClient cliente = new MongoClient(ConnectionString); MongoServer server = cliente.GetServer(); MongoDatabase database = server.GetDatabase("MongoLinq"); var colecao = database.GetCollection<Contato>("Contatos"); BsonDocument contato = new BsonDocument { { "Nome", nome }, { "Email", email }, { "Idade", idade } }; colecao.Insert(contato); } private static void CriarContatos() { try { MongoClient cliente = new MongoClient(ConnectionString); MongoServer server = cliente.GetServer(); MongoDatabase database = server.GetDatabase("MongoLinq"); var colecao = database.GetCollection<Contato>("Contatos"); _contato = new Contato { Nome = "Jose Carlos", Email = "macoratti@yahoo.com", Idade = 45 }; colecao.Insert(_contato); _contato = new Contato { Nome = "Miriam", Email = "miriamsq@bol.com.br", Idade = 38 }; colecao.Insert(_contato); _contato = new Contato { Nome = "Jefferson", Email = "jeff@net.com.br", Idade = 20 }; colecao.Insert(_contato); _contato = new Contato { Nome = "Yuri", Email = "yuri@net.com.br", Idade = 18 }; colecao.Insert(_contato); _contato = new Contato { Nome = "Bianca",Email = "bibi@uol.com.br", Idade = 16 }; colecao.Insert(_contato); _contato = new Contato { Nome = "Janice", Email = "janjan@uol.com.br", Idade = 18 }; } catch (Exception ex) { throw ex; } } public IEnumerable<Contato> GetTodosContatos() { MongoClient cliente = new MongoClient(ConnectionString); MongoServer server = cliente.GetServer(); MongoDatabase database = server.GetDatabase("MongoLinq"); var contatosLista = database.GetCollection<Contato>("Contatos"); var query = from e in contatosLista.AsQueryable<Contato>() select e; return query; } public IEnumerable<Contato> GetContatosPorNome(string nome) { MongoClient cliente = new MongoClient(ConnectionString); MongoServer server = cliente.GetServer(); MongoDatabase database = server.GetDatabase("MongoLinq"); var contatosLista = database.GetCollection<Contato>("Contatos"); var query = from e in contatosLista.AsQueryable<Contato>() where e.Nome == nome select e; return query; } } } |
Na classe AcessoMongo
temos os seguintes métodos:
Note que estamos referenciando o namespace :using MongoDB.Driver.Linq; |
No formulário form1.cs inclua os seguintes controles :
Botões de comando
TextBox
Listbox
MenuStrip
|
Vejamos a agora o código usado no formulário para consultar informações de contatos no MongoDB:
using
System;
using System.Windows.Forms;
No menu Arquivo->Criar Dados defina o código para criar dados no MongoDB usando o método CriarDados() ;
tr |
|
A chamada deste método cria o documento MongoLing e os dados conforme mostrado na figura pela ferramenta MongoVUE.
No evento Click do botão de comando Consultar inclua o código abaixo:
private void btnConsultar_Click(object sender, EventArgs e) { AcessoMongo mongo = new AcessoMongo(); if (string.IsNullOrWhiteSpace(txtNome.Text)) { var consulta = mongo.GetTodosContatos(); foreach (var contato in consulta) { lstbDados.Items.Add(contato.Nome); } } else { var consulta = mongo.GetContatosPorNome(txtNome.Text); foreach (var contato in consulta) { lstbDados.Items.Add(contato.Nome + " - " + contato.Email + " - " + contato.Idade); } } } |
Neste código o usuário informa o nome na caixa de texto e através do método GetContatosPorNome() será retornado os dados do contato.
Se um nome não for informado será acionado o método GetTodosContatos() que retorna todos os nomes do documento MongoDB
Como vimos a execução de consultas LINQ é bastante funcional e não exige nenhum configuração da base de dados MongoDB.
Pegue o projeto exemplo aqui: MongoDB_Linq.zip
João 13:13
Vós me chamais Mestre e Senhor; e dizeis bem, porque eu o sou.João 13:14
Ora, se eu, o Senhor e Mestre, vos lavei os pés, também vós deveis lavar os pés uns aos outros.João 13:15
Porque eu vos dei exemplo, para que, como eu vos fiz, façais vós também.João 13:16
Em verdade, em verdade vos digo: Não é o servo maior do que o seu senhor, nem o enviado maior do que aquele que o enviou.João 13:17
Se sabeis estas coisas, bem-aventurados sois se as praticardes.Referências: