馃搧 Crear una base de datos (Create DB)

Crear una base de datos (Create DB)

馃搧 Crear una base de datos (Create DB)

En esta lecci贸n veremos paso a paso c贸mo crear una base de datos en MongoDB para una tienda online (colecci贸n de usuarios), qu茅 herramientas usar y buenas pr谩cticas: desde instalaci贸n y comandos b谩sicos hasta uso con GUI y desde Node.js/Mongoose.


馃敡 Herramientas recomendadas


1️⃣ Paso 0 — decidir d贸nde alojar la base

  1. Local (Community Server): perfecto para desarrollo local y pruebas. Instalas MongoDB en tu m谩quina y controlas todo.
  2. Atlas (Cloud): ideal si quieres desplegar en la nube y evitar administrar servidores — recomendado para staging/producci贸n peque帽a.

2️⃣ Paso 1 — instalaci贸n e inicio (resumen)

(Si ya tienes MongoDB instalado o usas Atlas, salta a la secci贸n siguiente)

Luego inicia el servidor (por defecto puerto 27017) y abre el cliente con mongosh o mongo.


3️⃣ Paso 2 — crear la base de datos y la colecci贸n (l铆nea de comandos)

Ejemplo para una base llamada tiendaDB y colecci贸n usuarios:

# Abrir shell de MongoDB
mongosh

# Cambiar/crear base de datos llamada "tiendaDB"
use tiendaDB

# Insertar un documento crear谩 la colecci贸n "usuarios" autom谩ticamente
db.usuarios.insertOne({
  nombre: "Ana P茅rez",
  email: "ana@example.com",
  passwordHash: "HASH_AQUI",
  direccion: {
    calle: "C/ Mayor 1",
    ciudad: "Madrid",
    cp: "28001",
    pais: "Espa帽a"
  },
  carrito: [],
  roles: ["cliente"],
  createdAt: new Date(),
  isActive: true
})

# Ver los documentos
db.usuarios.find().pretty()
  

Note: El comando use tiendaDB cambia el contexto a la DB; si no exist铆a, MongoDB la crea cuando insertes datos.


4️⃣ Paso 3 — definir un esquema m铆nimo (conceptual)

Aunque MongoDB es esquema-flexible, conviene definir la estructura esperada para la colecci贸n usuarios:

{
  _id: ObjectId,
  nombre: String,
  email: String,           // 煤nico
  passwordHash: String,
  direccion: {
    calle: String,
    ciudad: String,
    cp: String,
    pais: String
  },
  telefono: String,
  carrito: [ { productoId, cantidad } ],
  roles: [ "cliente", "admin" ],
  createdAt: Date,
  lastLogin: Date,
  isActive: Boolean
}
  

5️⃣ Paso 4 — crear 铆ndices 煤tiles

脥ndices importantes para usuarios:

# 脥ndice 煤nico en email (impide duplicados)
db.usuarios.createIndex({ email: 1 }, { unique: true })

# 脥ndice en createdAt para consultas por fecha
db.usuarios.createIndex({ createdAt: -1 })

# 脥ndice compuesto ejemplo (ciudad + isActive)
db.usuarios.createIndex({ "direccion.ciudad": 1, isActive: 1 })
  

Los 铆ndices aceleran lecturas a costa de espacio y coste de escritura — crea solo los necesarios.


6️⃣ Paso 5 — a帽adir validaci贸n de esquema (opcional pero recomendado)

Puedes usar validadores JSON Schema al crear la colecci贸n para garantizar estructura m铆nima:

db.createCollection("usuarios", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["nombre", "email", "passwordHash", "createdAt"],
      properties: {
        nombre: { bsonType: "string" },
        email: { bsonType: "string", pattern: "^.+@.+\\..+$" },
        passwordHash: { bsonType: "string" },
        createdAt: { bsonType: "date" },
        isActive: { bsonType: "bool" }
      }
    }
  },
  validationLevel: "moderate"
})
  

validationLevel puede ser strict o moderate. Con esto evitas insertar documentos claramente inv谩lidos.


7️⃣ Paso 6 — herramientas GUI: MongoDB Compass

Con Compass puedes:

  • Conectar a tu servidor Atlas o local con la cadena de conexi贸n.
  • Crear bases de datos y colecciones desde un interfaz visual.
  • Definir validadores JSON Schema visualmente.
  • Ver 铆ndices, estad铆sticas y ejecutar consultas en modo visual.

Ejemplo r谩pido: abrir Compass → Conectar → Click en Create Database → nombre tiendaDB, colecci贸n usuarios.


8️⃣ Paso 7 — conectar desde Node.js (ejemplo m铆nimo)

Usando el driver oficial:

// npm install mongodb
const { MongoClient } = require("mongodb");

async function main() {
  const uri = "mongodb://localhost:27017"; // o tu cadena Atlas
  const client = new MongoClient(uri);

  try {
    await client.connect();
    const db = client.db("tiendaDB");
    const usuarios = db.collection("usuarios");

    // insertar
    const result = await usuarios.insertOne({
      nombre: "Luis",
      email: "luis@example.com",
      passwordHash: "HASH",
      createdAt: new Date(),
      isActive: true
    });
    console.log("Insertado ID:", result.insertedId);

    // buscar
    const user = await usuarios.findOne({ email: "luis@example.com" });
    console.log(user);
  } finally {
    await client.close();
  }
}

main().catch(console.error);
  

9️⃣ Paso 8 — usar Mongoose (si trabajas con Node/Express y quieres esquema)

Mongoose te da esquemas y validaci贸n en el c贸digo:

// npm install mongoose
const mongoose = require('mongoose');

async function main() {
  await mongoose.connect('mongodb://localhost:27017/tiendaDB');

  const usuarioSchema = new mongoose.Schema({
    nombre: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    passwordHash: { type: String, required: true },
    direccion: {
      calle: String, ciudad: String, cp: String, pais: String
    },
    carrito: [{ productoId: mongoose.Schema.Types.ObjectId, cantidad: Number }],
    roles: [String],
    createdAt: { type: Date, default: Date.now },
    isActive: { type: Boolean, default: true }
  });

  const Usuario = mongoose.model('Usuario', usuarioSchema);

  const u = await Usuario.create({ nombre: 'Eva', email: 'eva@example.com', passwordHash: 'HASH' });
  console.log('Usuario creado:', u._id);
}

main().catch(console.error);
  

馃攷 Ejemplo de consulta 煤til

Obtener usuarios activos en Madrid, ordenados por fecha de creaci贸n:

db.usuarios.find({ "direccion.ciudad": "Madrid", isActive: true })
          .sort({ createdAt: -1 })
          .limit(50)
  

馃攼 Consideraciones de seguridad y producci贸n

  • Nunca guardes contrase帽as en texto plano; guarda solo hashes con salt (bcrypt, argon2).
  • Habilita autenticaci贸n en MongoDB en producci贸n y crea usuarios con roles m铆nimos.
  • Usa TLS/SSL para conexiones remotas (Atlas lo fuerza por defecto).
  • Configura backups regulares (Atlas lo ofrece, en local usa mongodump / mongorestore o soluciones de snapshot de tu proveedor).

馃攣 Escalado y limits (breve)

  • Para grandes vol煤menes de datos en producci贸n usar谩s replica sets (alta disponibilidad) y sharding (particionado horizontal).
  • Planifica 铆ndices y tama帽o de documentos: documentos muy grandes (MBs) pueden penalizar rendimiento; piensa en referencias si corresponde.

✅ Resumen pr谩ctico (checklist)

  1. Decide local vs Atlas.
  2. Instala e inicia MongoDB o crea cluster en Atlas.
  3. Crea la DB: use tiendaDB.
  4. Define estructura m铆nima y reglas de validaci贸n.
  5. Crea 铆ndices esenciales (email 煤nico, createdAt...).
  6. Inserta datos de prueba y verifica con Compass o mongosh.
  7. Integra con tu app usando driver o Mongoose.
  8. Configura seguridad (auth, TLS) y backups antes de producci贸n.

Publicar un comentario

0 Comentarios