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.
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 MongoDB(NÃO Relacional):
O banco de dados é um contêiner físico para coleções.
Coleção é um grupo de documentos do MongoDB. É o equivalente a uma tabela RDBMS.
Um documento é um conjunto de pares de valores-chave. Os documentos têm esquema dinâmico.
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 |
O exemplo a seguir mostra a estrutura do documento de um blog, que é simplesmente um par de valores-chave separados por vírgula.
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:
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
habilite de acordo com essas imagens:
essa parte não é necessária para quem não usa gentoo
depois reconstrua e reinicie o computador:
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.
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:
agora confira se já há um grupo mongodb
criado com o comando:
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.
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)
sobre as configurações:
dbpath: "/data/db"
- o caminho do mongodb, se o seu estiver com /var/lib/mongodb
altere para esse;path: "/var/log/mongodb/mongodb.log"
- onde são guardados os logs;port: 27017
- a porta padrão, ou seja, você não precisa iniciar o mongodb com o comando: mongo --port 27017
se essa linha estiver devidamente configurada e “descomentada”.bindip: 127.0.0.1
- endereço de execução, ou seja, o loopback, se quiser alterar para um endereço específico, use essa linha.
para evitar problemas de permissão, recomendo você excluir tudo que possa existir dentro do diretório: /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
se quiser que o mongodb seja iniciado automaticamente sempre que você iniciar seu sistema, rode:
se quiser conferir se o serviço já está rodando, use um desses comandos:
rc-service mongodb status
.
Observação , Se houver erro, recomendo você retirar o mongodb da inicialização, ex.:
sudo rc-service del mongodb default
. Reiniciar seu computador , ou tentar remove um arquivo temporário de bloqueio que fica em :sudo rm -rf /tmp/mongodb-27017.sock
E depois de removido ou reiniciado. Iniciar o MongoDB manualmente com o comando: mongod &
, depois de listado todos os processos, basta pressionar ENTER e abrir o mongodb:
exemplo:
após devidamente configurado, é só entrar no mongodb via shell:
para sair do mongodb, basta rodar o comando: exit
.
Adicionar na inicialização automática NÃO é recomendado
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.
LEMBRANDO que o MongoDB é case sensitive, ou seja, faz total distinção de MAIÚSCULAS e minúsculas.
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:
saia do shell mongo exit
. agora para logar os parâmetros são similares ao do mysql:
ou com mais detalhes:
mongo --port 27017 --authenticationdatabase "admin" -u "nomedousuario" -p
perceba que ele só terá permissão específicas read
e/ou readwrite
em bancos específicos também: test
e 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.
show dbs
- lista todos os bancos de dados, o alias desse comando é show databases
;use [nome-do-banco]
- selecionar um banco de dados, ex.: use admin
;db
- verifica qual o banco de dados em uso no momento;use terminalroot
- cria um banco de dados, mas só passa a existir efetivamente quando você cria uma collection e insere algum dado nela, se não o mesmo não estará disponível quando você listar os bancos, deixará de existir;db.dropdatabase()
- apaga um banco de dados, usar após selecionar use nome-do-banco
que deseja;
show collections
- Mostra as collections;createcollection()
- Cria uma collection, protótipo dela é createcollection("nomedatabela", opções)
, exemplo: db.createcollection("minhacolecao")
.db.nome_da_colecao.find().pretty()
- Ler todos os dados de uma coleção, ex.: db.system.users.find().pretty()
, ler todos os dados da coleção system.users
, equivalente à select * from tabela
. essa saída sairá formatada, se quiser os dados numa única linha, use sem o método .pretty()
: db.system.users.find()
;db.nome_da_colecao.insert()
- Insere dados numa coleção, ex.: db.minhacolecao.insert( { "_id" : 0, "site" : "terminal root", "url" : "terminalroot.com.br", "content" : "sobre mongodb" } )
;db.nome_da_colecao.update(consulta, o_que_atualizar, opções)
- Atualiza(update) dados em um documento(campo), ex.: db.minhacolecao.update({'content':'sobre mongodb'},{$set:{'content':'mongodb definitivo tutorial'}})
, altera o documento de nome content que tem o valor: sobre mongodb por mongodb definitivo tutorial;db.nome_da_colecao.drop()
- Deleta uma coleção, ex.: db.minhacolecao.drop()
, deleta a coleção minhacolecao.db.dados.remove({"mail": "james@brown.org"})
- Remove um documento( linha em SQL ) que possui uma coluna( campo em SQL ) mail igual à james@brown.org.Se você inserir dados sem informar o
_id
ele será gerado automaticamente, tipo assim:
Criando uma collection(ela é criada automaticamente ao inserir os dados) e já inserindo dados:
Verificando os dados inseridos
help
saída conforme imagem abaixo:
veja a imagem abaixo de alguns comandos que citamos:
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. =)