Las bases de datos NoSQL (Not Only SQL) surgieron para manejar grandes volúmenes de datos flexibles y semiestructurados. Una de las más populares es MongoDB, que utiliza un formato muy cercano a JSON llamado BSON (Binary JSON).
En la práctica, cuando trabajamos con MongoDB usamos documentos en JSON para insertar, consultar y actualizar.
En lugar de tablas y filas (SQL), MongoDB usa:
Ejemplo de documento (usuario):
{
"_id": "ObjectId(64f8c7e12345abc67890def1)",
"nombre": "Ana",
"edad": 28,
"email": "ana@example.com",
"activo": true,
"direccion": {
"calle": "San Martín",
"numero": 123,
"ciudad": "Córdoba"
},
"hobbies": ["leer", "correr", "viajar"]
}
En la consola de MongoDB (mongosh):
db.usuarios.insertOne({
nombre: "Luis",
edad: 35,
email: "luis@example.com",
activo: false
});
// Insertar varios
db.usuarios.insertMany([
{ nombre: "Carlos", edad: 40, activo: true },
{ nombre: "María", edad: 29, activo: true }
]);
// Consultar todos
db.usuarios.find();
// Consultar con condición
db.usuarios.find({ activo: true });
// Proyección (solo ciertos campos)
db.usuarios.find(
{ activo: true },
{ nombre: 1, email: 1, _id: 0 }
);
// Resultado ejemplo: { "nombre": "María", "email": "maria@example.com" }
// Actualizar un campo
db.usuarios.updateOne(
{ nombre: "Luis" },
{ $set: { activo: true } }
);
// Actualizar varios documentos
db.usuarios.updateMany(
{ activo: false },
{ $set: { activo: true } }
);
// Eliminar uno
db.usuarios.deleteOne({ nombre: "Carlos" });
// Eliminar varios
db.usuarios.deleteMany({ activo: false });
En MongoDB, es común usar documentos JSON anidados:
{
"_id": "ObjectId(64f8c7e12345abc67890def2)",
"pedido": 5001,
"cliente": {
"nombre": "María",
"email": "maria@example.com"
},
"items": [
{ "producto": "Notebook", "cantidad": 1, "precio": 2500.00 },
{ "producto": "Mouse", "cantidad": 2, "precio": 850.75 }
],
"total": 4201.50,
"estado": "pendiente"
}
En una base SQL tradicional, estos datos estarían normalizados en varias tablas. En MongoDB, todo se guarda en un solo documento JSON.
MongoDB permite definir schemas de validación (similar a JSON Schema).
Ejemplo: solo aceptar documentos de usuarios con nombre y edad obligatorios.
db.createCollection("usuarios", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["nombre", "edad"],
properties: {
nombre: { bsonType: "string" },
edad: { bsonType: "int", minimum: 0 }
}
}
}
});
// Intento inválido (falta "edad")
db.usuarios.insertOne({ nombre: "Pedro" }); // Error de validación
from pymongo import MongoClient
cliente = MongoClient("mongodb://localhost:27017/")
db = cliente["mi_base"]
usuario = {"nombre": "Ana", "edad": 28, "activo": True}
db.usuarios.insert_one(usuario)
for u in db.usuarios.find({"activo": True}):
print(u)
Lib: PyMongo.
import { MongoClient } from "mongodb";
async function run() {
const client = new MongoClient("mongodb://localhost:27017");
await client.connect();
const db = client.db("mi_base");
await db.collection("usuarios").insertOne({ nombre: "Luis", edad: 30, activo: true });
const usuarios = await db.collection("usuarios").find({ activo: true }).toArray();
console.log(usuarios);
await client.close();
}
run();
Lib: MongoDB Node.js Driver.
Consideraciones: