Início > NoSQL > Primeiros Passos com MongoDB

Primeiros Passos com MongoDB

Comecei a estudar NoSQL, mais especificamente o MongoDB. Não tive problemas em instalar o Banco de Dados no Ubuntu 12.04 seguindo o tutorial.

Achei um exemplo de criação do database e acesso via código Java aqui. É um exemplo bem simples de cadastro de funcionários via shell, mas a autora cometeu um erro ao descrever o comando para acessar os dados. Ela coloca:

db.users.find()

Porém, como ela estava cadastrando um “employee”, a collection que deveria ser acessada era “employees” e não “users”:

db.employees.find()

Mesmo assim, achei que os comandos são intuitivos. Para criar e persistir um “registro” (ainda não descobri se esse jargão dos bancos convencionais se aplica a bancos orientados a documentos), é só fazer assim:

employee = {name : "Martin", no : 1}   
db.employees.save(employee)

Após o exemplo via shell, a autora passa para algo similar via código Java:

   Mongo mongo = new Mongo("localhost", 27017);  
   DB db = mongo.getDB("company");  
   DBCollection collection = db.getCollection("employees");  
   BasicDBObject employee = new BasicDBObject();  
   employee.put("name", "Donald");  
   employee.put("no", 2);  
   collection.insert(employee);  
   BasicDBObject searchEmployee = new BasicDBObject();  
   searchEmployee.put("no", 2);  
   DBCursor cursor = collection.find(searchEmployee);  
   while (cursor.hasNext()) {  
    System.out.println(cursor.next());  
   } 
}

Foi aí que fiquei triste. Mesmo que os comandos sejam intuitivos, o acúmulo de objetos do driver fazem com que o código fique poluído. Passou pela minha cabeça fazer uma camada de abstração. Então pensei: alguém já deve ter pensado nisso. Comecei a procurar uma forma melhor de interagir com o MongoDB via código.

Mongo com Jongo

Pesquisando um pouco, descobri o Morphia. Ele faz exatamente o que imaginei que faria: mapeamento Java/MongoDB. Ele se relaciona bem com o Spring e o Guice e permite raw conversion.

Sem pensar no MongoDB em si, mas sim na quantidade de código que preciso escrever para interagir com ele, ainda acho que poderia ser mais simples. Em aplicações que acessam bancos SQL-ANSI e que por algum motivo não usam ORM, temos que escrever as consultas e fazer todo o mapeamento manualmente. Com o Morphia, mapeamento de resultados e tratamento de polimorfismo também necessita de muita escrita de código. Pesquisando mais um pouco, descobri o Jongo.

O interessante do Jongo é a aproximação que ele permite dos comandos do shell com os comandos via código Java:

db.friends.find({"age": {$gt: 18}}); # Shell
friends.find("{age: {$gt: 18}}").as(Friend.class); // Java

Agora gostei! Com o Jongo, o mapeamento fica mais enxuto. A partir de um POJO, ele faz o mapeamento correto dos dados e de seus tipos usando interface fluente. Traduzi o exemplo do começo do artigo utilizando as dicas desse outro artigo.

   Mongo mongo = new Mongo("localhost", 27017);  
   DB db = mongo.getDB("company");  
   Jongo jongo = new Jongo(db);
   collection = jongo.getCollection("employees");
   collection.save(new Employee("Donald", 2));
   Iterable<Employee> employees = collection.find().as(Employee.class);
   while (employees.hasNext()) {  
    System.out.println(employees.next());
   } 
}

Bem simples, não? Vou continuar estudando até me sentir confortável para utilizá-lo em um projeto real, pois toda ferramenta trás um filosofia que deve ser entendida e tem limitações que devem ser consideradas. Esse quick start me trouxe uma boa primeira impressão do MongoDB, de seu ecossistema e de bancos NoSQL em geral.

Anúncios
Categorias:NoSQL Tags:, , ,
  1. 23/09/2012 às 7:43 PM

    Achei algumas considerações que devem ser feitas antes de se iniciar com MongoDB:

    http://www.infoq.com/br/presentations/mongodb-aplicacoes-reais

    Também achei um outro artigo introdutório sobre o MongoDB:

    http://architects.dzone.com/articles/understanding-document-based

  2. Thami
    03/07/2013 às 3:12 PM

    Olá,
    estou trabalhando com o Mongo em uma aplicação Java.
    Já tenho uma parte mapeada, mas a parte de busca fica muito grande usando o JavaDriver e não queria refazer o resto.
    Posso usar o Jongo juntamente com o java Driver?

    Obrigada

  3. 03/07/2013 às 7:09 PM

    Olá Thami,

    Nunca usei o JavaDriver, mas acho que poderia sim usar em combinação com o Jongo embora eu não seja fã de ter duas formas diferentes de mapeamento de persistência na mesma aplicação a não ser que seja uma arquitetura de portlets.

    Rodrigo

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: