Tutorial de MongoDB para Iniciantes

Diversos sites grandes principalmente Web Commerces usam o MongoDB.


Tutorial de MongoDB para Iniciantes

MongoDB é um software de banco de dados orientado a documentos livre, de código aberto e multiplataforma, escrito na linguagem C++.

Classificado como um programa de banco de dados NoSQL(termo genérico que representa os bancos de dados não relacionais, ou seja, não se baseia no princípio de que todos os dados estão armazenados em tabelas).

O MongoDB usa documentos semelhantes a JSON com esquemas.

É desenvolvido pela MongoDB Inc. e publicado sob uma combinação da GNU Affero General Public License e Licença Apache.

Modelo de dados

Como os dados são guardados no MongoDB(estilo JSON), por isso é um banco de dados não relacional(diferentemente do MySQL, Oracle, PostgreSQL, SQLite,…).

Modelo Relacional: Modelo Relacional

Modelo MongoDB(NÃO Relacional): NÃO Relacional JSON

Terminologias no MongoDB

Base de dados

O banco de dados é um contêiner físico para coleções.

Coleção

Coleção é um grupo de documentos do MongoDB. É o equivalente a uma tabela RDBMS.

Documento

Um documento é um conjunto de pares de valores-chave. Os documentos têm esquema dinâmico.

Comparação com os nomes usados em SQL

RDBMS MongoDB
Banco de Dados Banco de Dados
Tabela Coleção
Linha Documento
Coluna Campo
Junção de tabela Documentos incorporados
Chave Primária Chave Primária (chave padrão _id fornecida pelo próprio mongodb)
mysqld/oracle mongod
mysql/sqlplus mongo

Documento de exemplo

O exemplo a seguir mostra a estrutura do documento de um blog, que é simplesmente um par de valores-chave separados por vírgula.

{
   _id: ObjectId(7df78ad8902c)
   title: 'Visão geral do MongoDB',
   description: 'MongoDB, um banco de dados NoSQL',
   by: 'Marcos Oliveira',
   url: 'https://www.terminalroot.com.br',
   tags: ['mongodb', 'database', 'nosql'],
   likes: 100,
   comments: [
      {
         user:'user1',
         message: 'meu primeiro comentário',
         datecreated: new date(2011,1,20,2,15),
         like: 0
      },
      {
         user:'user2',
         message: 'meu segundo comentário',
         datecreated: new date(2011,1,25,7,45),
         like: 5
      }
   ]
}

vantagens do mongodb

diversos sites grandes, principalmente, webcommerces usam o mongodb, pois gera muito trabalho e processamento do servidor ao criar seleção de dados variados de um único produto.

por exemplo, um notebook existem diversos dados descritivos: marca, modelo, série, descrição, cor,… e isso pra quem programa banco de dados sabe a “dor de cabeça” que é criar essas relações em sql . mas com o mongodb isso é bem simples.

entre diversas áreas como:

instalação

antes de qualquer coisa, é necessário possuir o sistema de arquivos xfs habilitado no kernel, pois o mongodb o utiliza junto com a gnu c library, mais conhecida como glibc:

essa parte não é necessária para quem não usa gentoo

su
cd /usr/src/linux
make menuconfig

habilite de acordo com essas imagens:

essa parte não é necessária para quem não usa gentoo

file system kernel linux xfs kernel linux

depois reconstrua e reinicie o computador:

make && make modules_install && make install
grub-mkconfig -o /boot/grub/grub.cfg
reboot

no gentoo basta rodar o comando(ou sem sudo com o usuário root, su -c "emerge dev-db/mongodb"):

use --ask ou somente -a como parâmetro, e se quiser não adiconar ao world use --oneshot ou simplesmente -1, exemplo: sudo emerge -a1 dev-db/mongodb use o gereciador de pacotes da sua distro, ex.: sudo apt install mongodb para debian, ubuntu e outros.

sudo emerge dev-db/mongodb

após instalar, é necessário criar um diretório na raiz do seu sistema para que o mongodb crie o diretório para bancos de dados:

sudo mkdir -p /data/db/

agora confira se já há um grupo mongodb criado com o comando:

cat /etc/group | cut -d: -f1 | grep mongodb

se a saida for: mongodb , então tá tudo certo, se não for, você precisará criar esse grupo com o comando: sudo groupadd mongodb

agora adicione seu usuário à esse grupo:

após adicionar, será necessário deslogar e logar novamente no sistema para que as alterações tenham efeito.

sudo usermod -ag mongodb $user

configurações

o arquivo de configuração do mongodb pode ser localizado em: cat /etc/mongodb.conf e o mesmo contém as seguintes informações:

as linhas ‘comentadas’(iniciadas com # são ignoradas)

storage:
    dbpath: "/data/db"

systemlog:
    destination: file
    path: "/var/log/mongodb/mongodb.log"
    quiet: true
    logappend: true

net:
    port: 27017
    bindip: 127.0.0.1

sobre as configurações:

para evitar problemas de permissão, recomendo você excluir tudo que possa existir dentro do diretório: /var/lib/mongodb

sudo rm /var/lib/mongodb/*

após isso, é necessário iniciar o daemon, nesse caso para o openrc:

se você usa systemd, veja o comando equivalente aqui: https://wiki.gentoo.org/wiki/openrc_to_systemd_cheatsheet

sudo rc-service mongodb start

se quiser que o mongodb seja iniciado automaticamente sempre que você iniciar seu sistema, rode:

sudo rc-update add mongodb default

se quiser conferir se o serviço já está rodando, use um desses comandos: rc-service mongodb status.

exemplo: openrc mongodb

após devidamente configurado, é só entrar no mongodb via shell:

mongo

para sair do mongodb, basta rodar o comando: exit.

criando um usuário administrador

no shell mongo, adicione um usuário com a função useradminanydatabase no banco de dados admin. inclua funções adicionais conforme necessário para este usuário. por exemplo, o seguinte cria o usuário nomedousuario no banco de dados admin com a função useradminanydatabase e a função readwriteanydatabase.

a partir da versão 4.2 do mongo shell, é possível usar o método passwordprompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuários para solicitar a senha, em vez de especificar a senha diretamente na chamada de método/comando. no entanto, você ainda pode especificar a senha diretamente como faria com as versões anteriores do shell mongo.

use admin
db.createuser(
  {
    user: "nomedousuario",
    pwd: passwordprompt(), // ou pwd: "abc123", ou até mesmo senha em branco
    roles: [ { role: "useradminanydatabase", db: "admin" }, "readwriteanydatabase" ] // total privilégios
  }
)

se quiser copie e cole o código(shift + control + v , para colar no terminal) com as devidas alterações realizadas, exemplo de saída:

successfully added user: {
	"user" : "marcos",
	"roles" : [
		{
			"role" : "useradminanydatabase",
			"db" : "admin"
		},
		"readwriteanydatabase"
	]
}

saia do shell mongo exit . agora para logar os parâmetros são similares ao do mysql:

mongo -u nomedousuario -p
# mongodb shell version v4.2.2
# enter password: [insira_sua_senha]

ou com mais detalhes: mongo --port 27017 --authenticationdatabase "admin" -u "nomedousuario" -p

[opcional] - crie usuários adicionais se necessário

perceba que ele só terá permissão específicas read e/ou readwrite em bancos específicos também: test e reporting

use test
db.createuser(
  {
    user: "usuarionormal",
    pwd:  passwordprompt(),   // or cleartext password
    roles: [ { role: "readwrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

depois é só logar com esse usuário: mongo --port 27017 -u "usuarionormal" --authenticationdatabase "test" -p.

na documentação tem detalhes para situações gerais, se quiser dê uma olhada na documentação.

usando o mongodb (comandos)

veja a imagem abaixo de alguns comandos que citamos: comando mongodb terminal root

para mais comandos consulte a referência das comparações e se já souber sql e deseja traduzir o comando para mongodb use o querymongo. =)

mais informações de comandos

# shell
mongo --help
man mongo

# servidor
mongod --help
man mongod

# utilitário de despejo de dados
mongodump --help
man mongodump

# utilitário de exportação
mongoexport --help
man mongoexport

# utilitário gridfs
mongofiles --help
man mongofiles

# utilitário de importação
mongoimport --help
man mongoimport

# ferramenta de captura e repetição de tráfego
mongoreplay --help
man mongoreplay

# ferramenta de restauração de dados
mongorestore --help
man mongorestore

# roteador de consulta de cluster
mongos --help
man mongos

# utilitário de estatísticas
mongostat --help
man mongostat

# monitor de atividade
mongotop --help
man mongotop

links úteis

Compartilhe

Marcos Oliveira

Autor
Marcos Oliveira
Desenvolvedor de Software
youtube.com/TerminalRootTV

Pacote Promocional com Todos os Cursos

Adquira todos os cursos para se tornar um ninja do Terminal e do Linux.

Artigos Relacionados



Comentários