Skip to main content

Node JS



Introdução ao MongoDB


O MongoDB é um sistema de gerenciamento de banco de dados NoSQL (Not Only SQL) orientado a documento (documents), desenvolvido para armazenar e recuperar dados de forma ágil e flexível. Diferentemente dos bancos de dados relacionais tradicionais, como MySQL ou PostgreSQL, que organizam os dados em tabelas com linhas e colunas, o MongoDB armazena os dados em documentos no formato JSON (JavaScript Object Notation), o que oferece uma estrutura de dados mais dinâmica e escalável.


MongoDB é amplamente utilizado em uma variedade de aplicativos, incluindo aplicativos da web, aplicativos móveis, análise de big data e processamento de logs. Ele oferece uma alternativa flexível e escalável aos bancos de dados relacionais tradicionais, especialmente em ambientes onde os requisitos de escalabilidade e flexibilidade dos dados são altos.



Introdução ao NoSQL


NoSQL, que significa "Not Only SQL" (Não Apenas SQL), é uma abordagem de banco de dados não relacional, que difere dos sistemas de gerenciamento de banco de dados relacionais tradicionais (RDBMS), como MySQL, PostgreSQL e Oracle. Enquanto os bancos de dados relacionais seguem o modelo de dados tabulares, com linhas e colunas, o NoSQL abrange uma variedade de modelos de dados não estruturados ou semi-estruturados. Isso permite uma maior flexibilidade no armazenamento e na manipulação de diferentes tipos de dados, além de suportar melhor cenários de escalabilidade e desempenho em larga escala.


A segurança nos bancos de dados NoSQL, incluindo o MongoDB, é uma consideração importante e é tratada de várias maneiras para garantir a proteção dos dados armazenados. Embora os dados armazenados em formato JSON no MongoDB possam ser lidos por usuários autorizados, é fundamental implementar medidas de segurança adequadas para proteger esses dados contra acesso não autorizado ou uso indevido. Ao seguir práticas recomendadas de segurança e utilizar os recursos de segurança oferecidos pelo banco de dados NoSQL, é possível mitigar os riscos de segurança e proteger os dados de forma eficaz.


Nos bancos de dados NoSQL, não é comum usar consultas SQL tradicionais como em bancos de dados relacionais. Em vez disso, esses bancos de dados geralmente oferecem interfaces de programação de aplicativos (APIs) ou métodos específicos para manipular os dados.


Por exemplo, no MongoDB (um banco de dados NoSQL baseado em documentos), você não executa consultas SQL tradicionais, mas utiliza métodos específicos para interagir com os documentos armazenados. Estes métodos podem ser chamados a partir de várias linguagens de programação, como Python, JavaScript, Java, etc.



NoSQL versus SQL


Uma das diferenças fundamentais entre bancos de dados NoSQL e bancos de dados relacionais é a abordagem para modelagem de dados e relacionamentos. Em bancos de dados relacionais, como MySQL ou PostgreSQL, a estrutura dos dados é rigidamente definida por meio de tabelas, e os relacionamentos entre essas tabelas são estabelecidos por meio de chaves estrangeiras. Cada tabela geralmente tem uma relação com outras tabelas por meio dessas chaves estrangeiras, e as consultas normalmente envolvem junções (joins) para combinar dados de várias tabelas.


Por outro lado, em bancos de dados NoSQL, como MongoDB, os relacionamentos entre os dados são opcionais e podem ser modelados de forma flexível. Embora seja possível estabelecer relacionamentos entre documentos, não há a mesma estrutura de chave estrangeira como nos bancos de dados relacionais. Em vez disso, os dados podem ser aninhados em um único documento ou referenciar outros documentos por meio de chaves ou IDs.



NoSQL ou SQL?


Decidir entre usar um banco de dados NoSQL ou SQL depende de vários fatores e considerações.


Devemos usar um banco de dados SQL se os dados têm uma estrutura bem definida e relações complexas entre eles. Se as consultas envolvem junções complexas entre várias tabelas e operações agregadas.


Devemos usar um banco de dados NoSQL se os dados não têm uma estrutura rígida e podem variar em formato. Isso é muito comum em aplicativos web, redes sociais e IoT (Internet das Coisas). Se você precisa dimensionar horizontalmente (adicionar mais servidores para aumentar a capacidade), pois muitas soluções NoSQL são projetadas para escalabilidade horizontal. Se você precisa de flexibilidade para adicionar novos campos ou modificar a estrutura dos dados com frequência. Se o seu aplicativo requer alta velocidade de leitura e gravação em grande volume de dados.



Instalando o MongoDB


Vamos instalar o Mongodb no Linux, no meu caso será no Ubuntu 22.04.

Terminal
# Obtenha a chave gpg:
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor

# Crie o apontamento do mirror:
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

# Atualize a lista de pacotes disponíveis em seus repositórios:
sudo apt-get update

# Instale o MongoDB:
sudo apt-get install -y mongodb-org

# Inicie o daemon do MongoDB:
sudo systemctl start mongod

# Habilite o daemon do MongoDB a subir no boot:
sudo systemctl enable mongod

Se você ver isso: Failed to start mongod.service: Unit mongod.service not found. pode fazer isso sudo systemctl daemon-reload.


A tabela abaixo mostra alguns dos comandos mais comuns dentro do shell do MongoDB:

ComandoDescrição
mongoEntra no shell do MongoDB.
show dbsExibe uma lista de todos os bancos de dados disponíveis no servidor MongoDB.
use nome_do_bancoSeleciona um banco de dados específico para uso. Se o banco de dados não existir, ele será criado.
show collectionsExibe todas as coleções no banco de dados atualmente selecionado.
db.nome_da_colecao.find()Recupera todos os documentos de uma coleção específica.
db.nome_da_colecao.findOne()Recupera um único documento da coleção.
db.nome_da_colecao.insertOne({...})Insere um documento na coleção.

Para utilizar esses comandos, você precisa estar no shell do MongoDB após ter se conectado ao servidor MongoDB. Esses comandos são executados no shell para realizar operações como visualizar bancos de dados, selecionar bancos de dados, exibir coleções, recuperar documentos e inserir documentos em coleções.



Principais Entidades


No MongoDB, um banco de dados (Database) é uma coleção de dados que é tratada como uma única unidade. Cada banco de dados pode conter várias coleções, que por sua vez contêm os documentos. Os bancos de dados no MongoDB são criados dinamicamente quando o primeiro documento é inserido.


Uma coleção (Collection) no MongoDB é um agrupamento de documentos. É o equivalente a uma tabela em um banco de dados relacional. As coleções não impõem uma estrutura fixa nos documentos que elas contêm, o que significa que os documentos em uma coleção podem ter campos diferentes.


Um documento (Document) é um conjunto de pares de chave-valor no MongoDB, similar a um objeto JSON. É a unidade básica de armazenamento de dados no MongoDB e equivalente a uma linha em uma tabela de banco de dados relacional. Os documentos podem conter campos e valores de diferentes tipos de dados, incluindo outros documentos, arrays e valores escalares.



Primeiro contato com MongoDB


Vamos fazer o primeiro contato com o MongoDB.

Terminal
# Entre no shell do MongoDB:
mongo

# Vamos criar nosso primeiro banco de dados.
## Se o banco de dados já existir, ele entra nesse banco de dados.
## Se o banco de dados não existir, ele será criado e então você será movido para esse banco de dados.
use firstdb

# Vamos criar uma Collection (equivalente a tabela) e já inserir dados nela:
db.firsttable.insertOne({db: "mongodb", better: "idk", bestlanguage: "python"})

# Agora vamos procurar um dado (similar o select):
db.firsttable.findONe()

# Agora vamos procurar qualquer valor onde 'bestlanguage' seja igual a 'python' (similar o select com where):
db.firsttable.findONe({ bestlanguage: "python" })

É possível criar uma collection explicitamente sem inserir dados nela, para isso usamos o comando db.createCollection("products").



MongoDB no NodeJD


Vamos fazer a instalação do MongoDB para usar no NodeJS. Não vou demonstrar mais nada além da parte do MongoDB.

Terminal
# Instale o mongodb pelo npm:
npm install mongodb

db/conn.js
const { MongoClient } = require("mongodb"); // importar o mongodb

// URI para conexão com o Banco:
const uri = "mongodb://localhost:27017/testemongodb"; // testemongodb = nome do banco

// Cria um novo objeto 'MongoClient' e o armazena na variável 'client'.
// O objeto 'MongoClient' será usado para se conectar a um banco de dados MongoDB.
// A variável 'uri' contém a string de conexão do MongoDB, que especifica o nome do host,
// o número da porta e o nome do banco de dados ao qual se conectar.
const client = new MongoClient(uri);

// Função assíncrona
async function run() {
try {

// Linha que faz a conexão no banco, usando o var 'client' que tem o objeto 'MongoClient'
await client.connect(); // Só pode usar 'await' em função assíncrona.
console.log("Conectado ao MongoDB!");

} catch (err) {
console.log(err);
}
}

// Temos que executar 'run()' para fazer a conexão:
run();

// Exporta para ser usado por outros módulos.
module.exports = client;

Criando objetos com new name()

index.js
// Não se esqueça de importar no index.js:
const conn = require("./db/conn").run;


Fontes


https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/