NoSQL – MongoDB e C#

Com prometido, neste artigo estarei demonstrando como desenvolver uma integração básica com o Mongo DB (GET/SET) e C#, com os drivers que a própria Mongo DB desenvolve e dá suporte.

O código fonte completo do driver para .NET do Mongo DB pode ser baixado no site:
https://github.com/mongodb/mongo-csharp-driver/downloads

Se você não tem interesse no código fonte, também é possível baixar somente as DLLs (Setup).

A solution do driver é bem organizada (com testes unitários, setup e uma boa documentação), mas o que precisaremos são somente os binários do projeto Driver, assim basta dar um “build” em modo “release” e copiar as DLL para sua aplicação.

Após adicionadas e referenciadas as DLLs em um projeto .NET, no meu caso, uma aplicação WebService, vamos ao desenvolvimento:

O código abaixo demonstra a pesquisa de um único registro com o método Get e o parâmetro id, e com o método Set, a inserção e atualização de dados:

namespace MongoEndPoint
{
    using System.Web.Services;
    using System.Web.Script;
    using MongoDB.Bson;
    using MongoDB.Driver;

    [WebService]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class MongoEndPoint : WebService
    {
        [WebMethod]
        public string Get(int id)
        {
            string connectionString = "mongodb://localhost";

            var server = MongoServer.Create(connectionString);

            server.Connect();

            var db = server.GetDatabase("azul");

            var collection = db.GetCollection("coluna");

            var query = new QueryDocument("id", id);

            var obj = collection.FindOne(query);

            if (obj == null || !obj.Contains("nome")) return null;

            return obj["nome"].AsString;
        }

        [WebMethod]
        public void Set(int id, string nome)
        {
            string connectionString = "mongodb://localhost";

            var server = MongoServer.Create(connectionString);

            server.Connect();

            var db = server.GetDatabase("azul");

            var collection = db.GetCollection("coluna");

            var query = new QueryDocument("id", id);

            var obj = collection.FindOne(query);

            if (obj == null)
            {
                var doc = new BsonDocument();
                doc.Add("id", id);
                doc.Add("nome", nome);
                collection.Insert(doc);
            }
            else
            {
                var doc = new UpdateDocument();
                doc.Add("id", id);
                doc.Add("nome", nome);
                collection.Update(query, doc);
            }
        }
    }
}

Por fim, o método Get:

E o método Set:

Este foi meu último artigo que planejei tratar sobre NoSQL, escrito principalmente para aqueles que acompanham os artigos do blog saibam um pouco sobre o outro “lado da moeda”.

Se eu conhecer ou me apresentarem outro NoSQL que me chame a atenção, estarei escrevendo novemente sobre o assunto, mas por hora espero que tenham gostado destes cinco artigos.

NoSQL – MongoDB Instalação e Comandos Básicos

Neste artigo vou tratar do Mongo DB, um sistema de banco de dados orientado á documentos, isso quer dizer que ele também é um NoSQL, mas diferente do Cassandra, ele é mais flexível em termos de consultas (query) e gerenciamento, além de possuir uma ótima documentação para o pessoal de desenvolvimento (PHP, C++, C#, Java, Ruby, Python…).

Para um primeiro passo, vamos à instalação no Windows, começando pelo download:
http://www.mongodb.org/downloads

Após extrair os arquivos, crie as pastas “data” e “logs”:

Para instalação, é interessante utilizar o prompt do DOS para acompanhar mensagens de erro que venham aparecer. Por questões de acessos, executar o prompt do DOS como Administrador também poderá ajudar, pois será criado um serviço do Windows durante o processo de instalação.

Na pasta “bin” execute o seguinte comando, informando o caminho para um arquivo de logs e a pasta onde ficarão os arquivos de dados.

mongod --bind_ip 127.0.0.1 --logpath c:\mongodb\logs\mongo.log --logappend --dbpath c:\mongodb\data --directoryperdb --install

Se tudo funcionar corretamente, haverá entre os serviços do Windows o Mongo DB, agora basta iniciá-lo:

Para desinstalação, também bem simples, utilize o comando:

mongod --remove

O Mongo DB também possui seu prompt de comando (mongo.exe), que por padrão já se conecta ao servidor local:

Alguns comandos como o help poderão ajudar a entender como “navegar” com o prompt, não chega aos pés do help do “PowerShell”, mas ajuda.

Para demonstrar a criação de um banco de dados e “tabelas”, vamos primeiro relacionar os bancos de dados existentes:

show dbs

Definir qual banco será utilizado (detalhe, ele ainda não precisa existir para ser utilizado) e para “materializá-lo” basta fazer um insert em uma “tabela” que também não precisa existir ainda, que o Mongo DB se encarregará de criar toda a estrutura para salvar seus dados:

use nomeDoBanco

db.coluna.insert({id: 1, nome: 'Paulo'})

Para uma primeira consulta, criaremos um registro com o comando insert e recuperaremos este valor com comando find. Por fim removendo os registros com o comando remove, sob o critério que os registros a serem apagados tenham a “coluna” id com o valor ‘1’:

db.coluna.insert({id: 1, nome: 'valor'})

db.coluna.find()

db.coluna.remove({id: 1})

db.coluna.find()

Removendo todos os dados com o comando remove sem estabelecer critério, vamos ao “UPDATE”, onde com uma variável será possível capturar o registro e realizar as alterações. Para que as alterações tenham efeito, usaremos o comando update segundo um determinado critério (como um WHERE no SQL) e a variável com os valores a serem alterados (como um SET no SQL).

db.coluna.remove()

db.coluna.insert({id: 1, nome: 'valor'})

var variavel = db.coluna.findOne({id: 1})

variavel

variavel.nome = 'novo valor'

variavel

db.coluna.update({id: 1}, variavel}

db.coluna.findOne({id: 1})

Apresentado o Mongo DB, amanhã vou utilizar o “driver” que a própria Mongo DB desenvolve e dá suporte, demonstrando como criar um GET/SET simples com C#.

Antes de eu ter terminado este artigo, nosso amigo Márcio F. Althmann (@mfalthmann) escreveu sobre a experiência dele com o MongoDB e o ASP.NET MVC 3, vale a pena conferir:
http://www.marcioalthmann.net/2011/01/brincando-com-o-mongodb