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