Uso de JSON en bases de datos NoSQL (ejemplo: MongoDB)

1) Introducción

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).

  • JSON — formato de texto para representar datos.
  • BSON — versión binaria de JSON usada internamente en MongoDB, que añade tipos extra (fechas, binarios, ObjectId).

En la práctica, cuando trabajamos con MongoDB usamos documentos en JSON para insertar, consultar y actualizar.

2) Documentos JSON en MongoDB

En lugar de tablas y filas (SQL), MongoDB usa:

  • Colecciones (equivalentes a tablas).
  • Documentos (equivalentes a filas).

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"]
}

3) Inserción de documentos JSON

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 }
]);

4) Consultas con JSON

// 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" }

5) Actualización con JSON

// Actualizar un campo
db.usuarios.updateOne(
  { nombre: "Luis" },
  { $set: { activo: true } }
);

// Actualizar varios documentos
db.usuarios.updateMany(
  { activo: false },
  { $set: { activo: true } }
);

6) Eliminación de documentos

// Eliminar uno
db.usuarios.deleteOne({ nombre: "Carlos" });

// Eliminar varios
db.usuarios.deleteMany({ activo: false });

7) Ejemplo de estructura compleja

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.

8) Validación de JSON en MongoDB

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

9) Conexión desde lenguajes de programación

Python (PyMongo)

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.

Node.js (Driver oficial)

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.

10) Ventajas de usar JSON en MongoDB

  • Flexibilidad — No es necesario definir un esquema fijo como en SQL.
  • Natural para aplicaciones — APIs REST trabajan en JSON, y MongoDB también.
  • Documentos anidados — Menos necesidad de joins.
  • Ecosistema — Muy usado en proyectos de Big Data y microservicios.

Consideraciones:

  • Validar bien los datos; la flexibilidad puede llevar a inconsistencias.
  • Documentos muy grandes pueden complicar consultas; balancear entre anidación y normalización.

Resumen

  • MongoDB almacena datos en formato BSON (extensión binaria de JSON).
  • Se trabaja con colecciones (tablas) y documentos JSON (filas).
  • Operaciones CRUD (insert, find, update, delete) se realizan con JSON.
  • Permite anidación de objetos y arrays de forma natural.
  • Se pueden definir schemas de validación similares a JSON Schema.
  • Integración fácil con lenguajes modernos (Python, Node.js, Java, etc.).