Tag Archive | documentos

MongoDB modelo de dados orientado a documentos NoSQL: Introdução

Como primeiro post o tema escolhido foi o MongoDB. Por quais motivos? NoSQL (Not Only SQL) é algo citado com muita frequência hoje, principalmente envolvendo conceitos de desenvolvimento distribuído de software, big data etc.

Encontrei no MongoDB uma saída interessante ao clássico SQL (Structured Query Language). Mas como trabalha o MongoDB?

O MongoDB é um banco de dados NoSQL open-source orientado a documentos, a qual foi escrito na linguagem C++. Como entrada, recebe os dados no formato JSON (Javascript Object Notation), bastante utilizado hoje na web, principalmente em Javascript e estilos arquiteturais como REST.

Algumas características interessantes relacionadas ao MongoDB:

  • Possui suporte a processamento de dados, usufruindo do modelo de programação Map/Reduce da qual foi desenvolvido pela Google;
  • Possui armazenamento de arquivos utilizando GridFS;
  • Replicação em LANs e WANs;
  • Possui diversos drivers para trabalhar juntamente com as principais linguagens de programação hoje utilizadas no mercado ou em âmbito acadêmico: Python, Java, C, C++, C# entre outras.

Para mais informações sobre o MongoDB visite a sua página oficial: http://www.mongodb.org/

Comandos Básicos

Este post não inclui métodos de instalação da base de dados MongoDB para nenhum sistema operacional. Visite o site oficial já descrito anteriormente para obter esta informação.

Os comandos básicos e triviais para uso do MongoDB que considerei para criação deste post são:

show dbs

Este comando exibe todas as bases de dados presentes no momento.

use database

Este comando permite que a variável db (database) seja apontada para uma base de dados a ser manipulada. O conjunto de caracteres “database” deve ser alterado para o nome da base de dados a escolha do desenvolvedor, por exemplo: use meu_banco.

show collections

Após criar um apontador db para alguma base de dados, o comando show collections exibe as coleções presentes na base de dados atual. Collections são similares as tabelas em modelos relacionais, mas como descrito, o mongo trabalha pela inserção de documentos via JSON, ou seja, as coleções armazenam um conjunto de documentos.

db.your_collection.insert(object)

Este comando efetua a inserção de dados em uma coleção chamada “your_collection” (similar ao use database, o usuário cria um nome para sua coleção). Object são os dados brutos, descritos como um arquivo JSON.

db.your_collection.find(object)

O comando find basicamente recebe como parâmetro um JSON a ser buscado em sua base de dados, porém sem argumentos (db.your_collection.find()) devolve todos os documentos presentes na coleção.

db.your_collection.findOne(object)

Efetua uma busca pelo object (conteúdo JSON), retornando a primeira aparição do mesmo. Se nenhum parâmetro for passado, retorna o primeiro documento inserido presente na coleção.

db.dropDatabase()

Este comando simplesmente remove a base de dados. Obviamente todas as coleções presentes na base de dados são removidas também.

db.your_collection.update(params)

Este comando recebe parâmetros para atualizar um documento dado um critério ou key/value definido. Um exemplo para este critério é uma query ou um conjunto de características apresentadas por um documento.

db.your_collection.remove(params)

Similar ao comando anterior, porém remove um ou mais documentos, depende do critério estabelecido. Quando nenhum critério é informado (params), todos os documentos são removidos, então fique sempre atento (a) a este fato e seja cuidadoso (a).

A Figura abaixo contém o shell de interação com o MongoDB.

Shell do MongoDB em um terminal Linux.

Shell do MongoDB em um terminal Linux.

Utilizando os comandos básicos do MongoDB

Antes de prosseguirmos para a inserção de dados, busca, remoção e atualização (princípios básicos de qualquer modelo de banco de dados, seja SQL ou NoSQL), ainda existe um fato interessante a respeito do MongoDB.

O MongoDB utiliza um modelo de timestamp, ObjectID que basicamente é um BSON (Binary JSON). Mas qual a sua finalidade?

No MongoDB os documentos armazenados nas coleções recebem um campo de identificação único (_id). Este campo é similar a uma chave primária no modelo relacional. O MongoDB permite aos próprios usuários manipularem o identificador (_id), inserindo-os da sua maneira. Mas caso o usuário não queira, a própria base de dados irá gerar um identificador para o usuário.

Agora, mãos a obra. A figura abaixo contém a execução dos três primeiros comandos no shell do MongoDB executado sobre o sistema operacional Linux. Observe que existia uma base de dados chamada biblioteca e ela foi excluída após o uso do comando db.dropDatabase(), assim, como descrito, todas as coleções foram removidas juntamente com a base de dados. Utilizei novamente uma base de dados chamada de biblioteca para fins didáticos, creio que a inserção de livros, seja um exemplo muito simplista e fácil de ser compreendido.

Comandos sendo executados no Shell do MongoDB.

Comandos sendo executados no Shell do MongoDB.

A figura abaixo é um exemplo de inserção de um documento na coleção livros.

Inserção de um documento no Shell do MongoDB.

Inserção de um documento no Shell do MongoDB.

O documento contém nada mais do que um conteúdo representado na forma de JSON, como descrito anteriormente ao longo do post. O livro possui um título e um autor, sendo o modelo JSON:

{ titulo: "Java - Como Programar", autor: "Paul Deitel"}

A figura abaixo contém a inserção de mais um documento na coleção de livros, mas note que autor contém um array de autores desta vez, possibilitando a inserção de vários elementos. Um fato interessante, o MongoDB permite que o array seja trabalhado como uma FIFO (First In First Out), possibilitando que novos autores sejam adicionados ao final deste array. Mas este fato não será abordado neste post.

Inserção de um documento com campo em formato de array.

Inserção de um documento com campo em formato de array.

A figura abaixo contém uma consulta sem parâmetros para a função find(). Note que a consulta retorna um identificador “_id”, já descrito ao longo deste texto.

Execução do comando find() no shell do MongoDB.

Execução do comando find() no shell do MongoDB.

A figura abaixo contém a execução da função de consulta find com um JSON sendo passado como parâmetro. Neste caso estamos procurando o livro com o título: “Java – Como Programar”. Caso existisse mais de um livro com este nome, ele seria retornado como parâmetro. Faça você mesmo o teste, crie um documento novo, por exemplo, insira um novo livro do Deitel e efetue a busca pelos livros que o Deitel possui na sua base de dados. O comando findOne(), fica a teste do leitor também.

Execução do comando find() com um JSON passado como parâmetro.

Execução do comando find() com um JSON passado como parâmetro.

Agora vamos alterar o documento cujo autor é o Deitel. Vamos adicionar um novo campo, ano de criação do livro. Observe que utilizamos o comando $set para que seja adicionado o novo campo, executando uma busca pelo mesmo título notamos que agora existe o campo ano. Mas o campo ano estará no documento cujo um dos autores é o Cormen? Resposta: não.

Comando update no MongoDB.

Comando update no MongoDB.

Por fim, para finalizarmos este post o comando de remoção de documentos. Neste caso vamos remover apenas os documentos cujo campo ano equivale a 2010. Executando uma busca, vemos que o livro do Cormen não possui o campo ano, descrito já anteriormente.

Comando remove() no MongoDB.

Comando remove() no MongoDB.

Por este post é só. Espero que tenham gostado das funcionalidades básicas do MongoDB, este modelo orientado a documentos da 10gen possui diversas características, trabalha com busca por localização geográfica (GPS), possui um modelo de agregação pipeline  etc. Uma outra hora volto com mais funcionalidades do MongoDB.

Não deixem de conferir os links a seguir, eles completam e muito este post.

http://teachmetocode.com/screencasts/introduction-to-mongodb-part-i/

Palestra no canal Gonow sobre o MongoDB sendo usado no CartolaFC (game fantasy da Globo.com), palestra ministrada por Franklin Amorim no MongoSP 2011:

MongoDB com Python no canal Pycon apac, Mathias Stearn: 

Java e MongoDB na página do Mkyong:  Java MongoDB Tutorial

Obrigado.

Referências:

MongoDB, Inc. Agile and Scalable.  Disponível em: http://www.mongodb.org/ (Acessado em: 15/09/2013) (Esta página, por si só é uma grande referência com inúmeros exemplos)

Anúncios