Introdução: Por que um desenvolvedor precisa conhecer SQL e NoSQL?
O desenvolvimento web moderno em JavaScript (Node.js) raramente acontece sem interação com bancos de dados. A escolha entre SGBDs relacionais (PostgreSQL) e orientados a documentos (MongoDB) é uma das principais tarefas arquiteturais. Neste artigo, vamos abordar na prática como conectar-se a ambos os bancos de dados, realizar operações CRUD e escolher a ferramenta adequada para cada tarefa específica.
Usaremos bibliotecas populares: pg para PostgreSQL e mongoose para MongoDB. Todos os exemplos de código são em Node.js.
1. PostgreSQL no Node.js: abordagem relacional
1.1. Conexão e configuração
PostgreSQL é um SGBD relacional poderoso com suporte a SQL. Para trabalhar com ele no Node.js, instale o pacote pg:
npm install pgExemplo de conexão ao banco de dados local mydb:
const { Pool } = require('pg');
const pool = new Pool({ user: 'postgres', host: 'localhost', database: 'mydb', password: 'secret', port: 5432,});
// Testando a conexãopool.query('SELECT NOW()', (err, res) => { if (err) { console.error('Erro de conexão:', err); } else { console.log('Conectado ao PostgreSQL:', res.rows[0].now); }});1.2. Operações CRUD (criação, leitura, atualização, exclusão)
Vamos criar a tabela users e realizar operações básicas.
Criação da tabela:
const createTable = async () => { const query = ` CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, age INTEGER ); `; await pool.query(query); console.log('Tabela users criada');};
createTable();Inserção de dados (INSERT):
const addUser = async (name, email, age) => { const query = 'INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING *'; const values = [name, email, age]; const res = await pool.query(query, values); console.log('Usuário adicionado:', res.rows[0]);};
addUser('João Silva', 'joao@example.com', 30);Leitura de dados (SELECT):
const getUsers = async () => { const res = await pool.query('SELECT * FROM users'); console.log('Todos os usuários:', res.rows);};
getUsers();Atualização de dados (UPDATE):
const updateUserAge = async (id, newAge) => { const query = 'UPDATE users SET age = $1 WHERE id = $2 RETURNING *'; const values = [newAge, id]; const res = await pool.query(query, values); console.log('Usuário atualizado:', res.rows[0]);};
updateUserAge(1, 31);Exclusão de dados (DELETE):
const deleteUser = async (id) => { const query = 'DELETE FROM users WHERE id = $1 RETURNING *'; const values = [id]; const res = await pool.query(query, values); console.log('Usuário excluído:', res.rows[0]);};
deleteUser(1);Observe o uso de consultas parametrizadas ($1, $2). Isso protege contra injeção de SQL.
1.3. Quando escolher PostgreSQL?
- Quando é necessária uma estrutura de dados rigorosa e suporte à integridade (chaves estrangeiras, transações).
- Quando são necessárias consultas JOIN complexas e agregações.
- Trabalho com dados financeiros ou criticamente importantes.
- O projeto utiliza ORMs como Sequelize ou TypeORM.
2. MongoDB no Node.js: flexibilidade NoSQL
2.1. Conexão via Mongoose
MongoDB é um banco de dados orientado a documentos, onde os dados são armazenados em formato JSON-like (BSON). Para trabalhar com ele, instale o mongoose:
npm install mongooseConexão ao servidor local Mo