MongoDB: Manipular a base de dados NoSQL no Windows 10
No artigo anterior aprendemos a instalar e a configurar a base de dados NoSQL MongoDB. Neste artigo vamos aprender a trabalhar com ela, fazendo manipulação de dados, aprender a criar utilizadores, criar novas bases de dados, inserção de informação, pesquisas, edições e eliminar dados.
Vamos então começar!
Para fazer a manipulação do MongoDB, primeiro é necessário entrar na shell do MongoDB, para isso vamos abrir a linha de comandos como administrador, e localizarmo-nos na pasta de instalação do MongoDB, dentro da pasta “bin”, e na linha de comandos escrevemos o seguinte comando:
mongo |
Feito isto estamos dentro da shell do MongoDB. A partir daqui podemos começar a manipular a nossa base de dados.
Criar um novo utilizador
O próximo passo será criar um novo utilizador na base de dados e definir os respetivos privilégios (roles). Para isso vamos escrever os seguintes comandos:
db.createUser({ user:"ricardo", pwd:"admin", roles:["readWrite","dbAdmin"] }); |
Copiem o código anterior, façam as vossas alterações e por fim colem na shell do MongoDB. Se tudo correr bem, o vosso utilizador com os privilégios de administrador da base de dados irá ser corretamente criado.
Ver lista de bases de dados
Para mostrar todas as bases de dados disponíveis no mongodb usamos o seguinte comando:
show dbs |
Como podemos verificar, o MongoDB já trás por omissão duas bases de dados: a base de dados “admin” e a base de dados “local.”
Criar Bases de Dados
Vamos agora aprender a criar uma nova base de dados. Vamos criar então, como exemplo, a base dados com o nome “Loja”.
use loja |
Como podem ver, ao usarmos o comando acima referido criamos a base de dados loja e automaticamente entramos dentro da base de dados criada.
(Nota: Para confirmarem a base de dados onde estão, podem sempre a qualquer altura escrever o comando “db” para verem a base de dados onde estão a trabalhar).
Criação de coleções
O próximo passo que vamos aprender, será a criação de coleções. As coleções permitem armazenar documentos e nada mais são que o correspondente às tabelas nas bases de dados relacionais. Para criarmos uma coleção devemos usar o seguinte comando:
db.createCollection('clientes'); |
Para verificarem que a coleção foi corretamente criada, podem correr o seguinte comando:
show collections |
Inserir documento na coleção
Vamos aprender agora a inserir um documento, na coleção “clientes” que criamos anteriormente. Para isso vamos usar o seguinte comando:
db.clientes.insert({nome:"Ricardo", sobrenome:"Fonseca"}); |
Como podem verificar na imagem, os dados foram inseridos com sucesso na coleção “clientes”. Para verificar os documentos inseridos numa determinada coleção usamos o seguinte comando:
db.clientes.find(); |
Como pode ver, foi apresentado o documento que inserimos anteriormente.
(Nota: Sempre que inserimos um determinado documento, o _id do mesmo é gerado automaticamente, sendo ele único para cada documento criado).
Adicionar vários documentos de uma só vez
Vamos agora aprender a adicionar vários documentos de uma só vez, inclusive vamos adicionar novos atributos e ver o que acontece. Vamos então escrever o seguinte código no terminal.
db.clientes.insert([{nome:"Pedro", sobrenome:"Pinto"},{nome:"Manuel", sobrenome:"Santos", genero:"Masculino"}]); |
Como podem ver, para adicionar vários documentos de uma só vez basta colocarmos todo a informação dentro de um array. Podemos ainda ver também que com o uso de base de dados do tipo NoSQL, não necessitamos de especificar o tipo de campos, isto é, podemos sempre em qualquer altura adicionar numa determinada coleção diferentes documentos com diferentes campos.
Exemplo disso é o documento relativo ao Manuel que tem o campo género contrariamente aos outros dois documentos adicionados anteriormente.
Ver documentos
As bases de dados do tipo NoSQL servem na sua grande maioria para armazenar elevados números de documentos. Fazer a procura de informação linha a linha acaba por não ser pratico. Existe um comando que nos permite visualizar os documentos de uma forma visualmente mais apelativa.
db.clientes.find().pretty() |
Vamos agora adicionar um novo campo, num dos documentos adicionados anteriormente, para isso vamos usar o seguinte comando:
db.clientes.update({nome:"Ricardo"},{$set:{genero:"Masculino"}}); |
(Nota: Para fins de aprendizagem, a pesquisa do documento á alterar foi pelo nome, mas numa aplicação para produção o indicado deve ser pelo “_id”, pois caso existissem nomes iguais todos eles seriam alterados).
No exemplo acima adicionamos um novo campo num documento já existente. Mas caso queiramos alterar o valor de um campo já inserido como podemos fazer? É simples vamos usar o seguinte comando:
db.clientes.update({nome:"Manuel"},{$set:{sobrenome:"Pereira"}}); |
Como podem ver o sobrenome do Manuel passou de Santos para Pereira. Vamos agora aprender a eliminar documentos presentes na nossa coleção. Para isso vamos analisar os seguintes códigos:
db.clientes.remove({nome:"Manuel"}); |
Com este código o que irá acontecer será a eliminação de todos os documentos cujo nome seja Manuel. Existe outra forma de apagar apenas o primeiro documento cujo nome seja Manuel, para tal usamos o seguinte código.
db.clientes.remove({nome:"Manuel"}, {justOne:true}); |
Por fim vamos ensinar como fazer pesquisas e aprender a usar querys para aceder a determinadas informações que quisermos.
Para realizar os testes, vamos adicionar outros clientes a nossa coleção, para tal copiem e colem os seguintes códigos:
db.clientes.insert({nome:"José", sobrenome:"Pinheiro", genero:"Masculino"}); db.clientes.insert({nome:"Bernardo", sobrenome:"Matos", genero:"Masculino"}); db.clientes.insert({nome:"Maria", sobrenome:"Clara", genero:"Feminino"}); db.clientes.insert({nome:"Jõao", sobrenome:"Cardoso", genero:"Masculino"}); db.clientes.insert({nome:"Sandra", sobrenome:"Oliveira", genero:"Feminino"}); |
Pesquisa de documentos
Agora já temos um conjunto de informação disponível na nossa coleção podemos fazer um conjunto de queries para testar o mecanismo de pesquisa do MongoDB. Vamos numa primeira fase fazer uma pesquisa simples apenas com um parâmetro:
db.clientes.find({nome:"Ricardo"}); |
Vamos agora fazer uma pesquisa com diferentes parâmetros, e ver quais os resultados apresentados. Para tal vamos fazer uma pesquisa de todos os resultados que contenham o nome Ricardo e o género Feminino. Para isso vamos escrever o seguinte código:
db.clientes.find({$or:[{nome:"Ricardo"},{genero:"Feminino"}]}); |
Ordenação de resultados
Outro comando interessante que podemos usar é a ordenação dos resultados, por exemplo por ordem alfabética. Para ordenarmos as nossas pesquisas podemos usar o seguinte comando:
db.clientes.find().sort({nome:1}); |
(Nota: Caso queiram os resultados de forma ascendente podem utilizar o seguinte comando: db.clientes.find().sort({nome:-1}); )
Contagem de documentos
Por fim podemos ainda fazer a contagem de todos os documentos presentes na nossa coleção, para tal usamos o seguinte comando:
db.clientes.find().count(); |
Podemos também fazer a contagem dos resultados de uma determinada query, para isso o comando é o seguinte
db.clientes.find({genero:"Feminino"}).count(); |
Como podem ver a manipulação da base de dados MongoDB é bastante simples e rápida, com ela podemos fazer inúmeras tarefas e a velocidade de pesquisa em relação as bases de dados relacionais é superior.
Podem consultar toda a documentação do MongoDB aqui e descobrirem por vocês mesmos todas as vantagens na utilização desta incrível base de dados NoSQL.
Não percam o próximo artigo onde vamos a ensinar a criar um webservice REST em NodeJS para a utilização da base de dados MongoDB. Não percam!
Este artigo tem mais de um ano
Bom artigo.
Já explorei alguns pontos do MongoDB, incluindo acesso através do Node/Hapi. Maioria dos bons módulos NPM/Node para base de dados SQL funcionam em modo assíncrono, o módulo MongoJS é muito mais síncrono, o que facilita a programação.
Espero boa continuação destes artigos.
Hadoop não é MongoDB, o logo do elefante é do Hadoop 🙂
Não percebi este post. Onde está o logo do elefante?
Bom artigo pplware 😉
Desde já obrigado por seguirem as sugestões que vamos postando nos comentários.
Penso que poderiamos ainda complicar um pouco mais num segundo tutorial com relações ou cruzamento de pesquisas possiveis de forma a retirar algum potencial extra 😉
Apenas sugestão de qualquer das formas bom trabalho!