Como criar um banco de dados com MongoDB

Como criar um banco de dados com MongoDB

Ao iniciar os estudos sobre banco de dados, normalmente começamos pelo MySQL que, apesar de ser escalável e muito usado, têm algumas limitações. Em algum momento, durante a sua evolução nos estudos de banco de dados é possível que se depare com uma situação onde precise armazenar dados em formato de arrays ou objetos, algo que é impossível no MySQL sem criar uma estrutura de tabelas.

Sendo assim, por ser uma linguagem mais fácil e simples do que o MySQL, tem se tornado cada vez mais comum sistemas que usam somente MongoDB.

Nesse artigo, entenderemos o que é o MongoDB, quais são suas vantagens e desvantagens e, em seguida, veremos um exemplo prático de como criar uma estrutura backend usando Node.js e MongoDB.

O que é MongoDB?

O MongoDB é um banco de dados não relacional, ou seja, ele não é estruturado em tabelas como o MySQL. Além disso, no MongoDB podemos armazenar dados mais complexos, como por exemplo arrays e objetos. Por ter uma estrutura e comando muito parecidos com JavaScript, ele acaba sendo o preferido por muitos programadores. Essa tecnologia já é utilizada por empresas como Google, Facebook e diversas outras.

Vantagens do MongoDB

No MongoDB temos algo chamado coleções, que seria algo semelhante às tabelas no MySQL, porém, diferente do MySQL, o MongoDB pode ter vários documentos diferentes dentro de uma coleção, trabalhando com dados heterogêneos. o que fornece uma maior flexibilidade na criação dos documentos.

Além disso, não precisamos criar uma estrutura relacional projetando o esquema do banco de dados.

Desvantagens do MongoDB

Apesar de já ser o suficiente ele usa muita memória e tem um limite de 16MB para armazenar nos documentos. Também temos um limite para aninhar objetos no formato BSON de 100 níveis, ou seja, temos um limite para guardar “objetos dentro de objetos” que é mais que o suficiente para a grande maioria dos casos.

Como criar uma aplicação Node.js com MongoDB

A ideia desse projeto é criar um banco de dados para uma loja de celulares. A aplicação terá funções como: cadastrar celulares, ver os celulares cadastrados, ver um celular específico criado e editar um celular já adicionado.

Para começar criaremos um diretório para a parte backend.

mkdir backend

cd backend

mkdir src

npm init -y

Inicialmente alteramos o package.json

./package.json

Após isso, criaremos o ambiente docker com a Dockerfile e a docker-compose. Esses arquivos são responsáveis por garantir a execução da aplicação em um ambiente em que todas as ferramentas usadas estejam na versão correta.

touch Dockerfile

./Dockerfile


touch docker-compose.yml

./docker-compose.yml


Agora especificamos os arquivos raiz e as configurações de compilação no arquivo tsconfig.json.

touch tsconfig.json

./tsconfig.json

Com o ambiente criado podemos começar os arquivos responsáveis por criar e se comunicar com o banco de dados.

Os arquivos principais do backend são o app.ts e o server.ts pois são eles que iniciam o servidor do banco de dados. Dessa maneira, criaremos os arquivos seguindo os próximos passos:

touch app.ts

./src/app.ts

Os imports feitos serão criados e explicados posteriormente no arquivo, mas com essa estrutura será possível realizar ações pela rota /celphones.

Agora criaremos o arquivo do servidor.

touch server.ts

./src/server.ts

Agora que temos os arquivos iniciais do servidor, podemos começar a fazer o Model, camada que faz a abstração da comunicação com o banco de dados e onde será feita a conexão com o MongoDB.

mkdir Models

cd Models

touch Connection.ts

./src/Models/Connection.ts

Com a conexão feita será criado os arquivos responsáveis por criar a Collection dos celulares e por realizar as funções de comunicação com o DB.

touch AbstractODM.ts

./src/Models/AbstractODM.ts

touch CelphonesODM.ts

./src/Models/CelphonesODM.ts

Com isso feito, já temos toda a comunicação e as funções para manipular e consultar o banco de dados. Agora, criaremos a Interface dos Celphones, algo que garante como os dados do objeto devem, ser recebidos.

Agora voltamos para a raiz do ./src e criamos a Interface:

mkdir Interfaces

cd Interfaces

touch ICelphone.ts

./src/Interfaces/ICelphone.ts

Após criar a Interface do celular, podemos criar o Domínio com classes que será usado pela camada de serviços para abstrair a parte das funções que altera o objeto enviado ou recebido.

Volte novamente à raiz ./src e siga os passos:

mkdir Domains

cd Domains

touch Celphone.ts

./src/Domains/Celphone.ts

Agora faremos a camada de Service que irá usar as funções desse domínio.

./src

mkdir Services

cd Services

touch CelphoneServices.ts

Com a camada de serviços concluída, só falta a camada de Controller. Essa camada é onde fazemos nossas requisições.

./src

mkdir Controllers

cd Controllers

touch CelphoneController.ts

./src/Controllers/CelphoneController.ts

Finalmente temos toda a nossa estrutura arquitetada e podemos criar as rotas que acessaremos para chamar as funções.

Para isso volte para a raiz ./src e siga os passos a seguir

mkdir routes

cd routes

touch celularRoute.ts

./src/routes/celularRoute.ts

Por fim, concluímos nossa aplicação. Para executar e testar as funcionalidades, volte para a raiz do projeto ./backend e roda o docker-compose com o comando a seguir.

./backend

docker-compose up -d

Em seguida, execute e entre no terminal da aplicação com o seguinte comando:

docker exec -it celular_shop bash

Dentro do terminal instale as dependências e rode o programa:

npm install

npm run dev

Caso tudo dê certo você receberá uma mensagem informando em qual porta o servidor está rodando.

Conclusão

No SQL temos que criar uma estrutura de dados complexa e visual, algo que deve ser pensado e pré definido, o que torna o SQL um pouco restritivo. Também é importante ressaltar que, no SQL, os dados devem seguir a mesma estrutura, algo que no MongoDB não é uma realidade.

O MongoDB por ser uma base de dados NoSQL é muito mais dinâmico, tendo uma estrutura de dado que segue o conceito de “chave-valor”. Essa flexibilidade permite que seja usado com mais facilidade pelos programadores. Entender ambas as ferramentas é importante para qualquer programador que estuda Banco de Dados, porém, na maioria dos casos eu optaria pelo MongoDB pela facilidade.

Até logo!

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.