📁 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