Introducción: ¿Por qué un desarrollador debe conocer SQL y NoSQL?
El desarrollo web moderno con JavaScript (Node.js) rara vez prescinde de la interacción con bases de datos. La elección entre sistemas de gestión de bases de datos relacionales (PostgreSQL) y orientados a documentos (MongoDB) es una de las tareas arquitectónicas clave. En este artículo, analizaremos en la práctica cómo conectarse a ambas bases de datos, realizar operaciones CRUD y elegir la herramienta adecuada para una tarea específica.
Usaremos bibliotecas populares: pg para PostgreSQL y mongoose para MongoDB. Todos los ejemplos de código están en Node.js.
1. PostgreSQL en Node.js: enfoque relacional
1.1. Conexión y configuración
PostgreSQL es un potente sistema de gestión de bases de datos relacional con soporte para SQL. Para trabajar con él en Node.js, instale el paquete pg:
npm install pgEjemplo de conexión a la base de datos local mydb:
const { Pool } = require('pg');
const pool = new Pool({ user: 'postgres', host: 'localhost', database: 'mydb', password: 'secret', port: 5432,});
// Prueba de conexiónpool.query('SELECT NOW()', (err, res) => { if (err) { console.error('Error de conexión:', err); } else { console.log('Conectado a PostgreSQL:', res.rows[0].now); }});1.2. Operaciones CRUD (crear, leer, actualizar, eliminar)
Creemos la tabla users y realicemos operaciones básicas.
Creación de tabla:
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('Tabla users creada');};
createTable();Inserción de datos (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('Usuario agregado:', res.rows[0]);};
addUser('Iván Petrov', 'ivan@example.com', 30);Lectura de datos (SELECT):
const getUsers = async () => { const res = await pool.query('SELECT * FROM users'); console.log('Todos los usuarios:', res.rows);};
getUsers();Actualización de datos (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('Usuario actualizado:', res.rows[0]);};
updateUserAge(1, 31);Eliminación de datos (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('Usuario eliminado:', res.rows[0]);};
deleteUser(1);Observe el uso de consultas parametrizadas ($1, $2). Esto protege contra inyecciones SQL.
1.3. ¿Cuándo elegir PostgreSQL?
- Se requiere una estructura de datos estricta y soporte de integridad (claves foráneas, transacciones).
- Se necesitan consultas JOIN complejas y agregaciones.
- Trabajo con datos financieros o críticos.
- El proyecto utiliza un ORM como Sequelize o TypeORM.
2. MongoDB en Node.js: flexibilidad de NoSQL
2.1. Conexión a través de Mongoose
MongoDB es una base de datos orientada a documentos, donde los datos se almacenan en formato JSON-like (BSON). Para trabajar con ella, instale mongoose:
npm install mongooseConexión al servidor local de Mo