Estructurar Datos de Productos en MongoDB

MongoDBBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá los fundamentos del diseño de un esquema de documentos estructurado para datos de productos utilizando MongoDB. Para una aplicación de comercio electrónico, un esquema bien diseñado es crucial para el rendimiento y la escalabilidad. Comenzará creando un documento de producto simple y lo mejorará progresivamente incrustando datos relacionados como información de precios y existencias, y utilizando arreglos (arrays) para atributos de múltiples valores. Al final de este laboratorio, tendrá una sólida comprensión de cómo modelar datos de productos de manera efectiva en una base de datos MongoDB.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de reseñas positivas del 93% por parte de los estudiantes.

Crear un Documento de Producto Básico

En este primer paso, se conectará al servidor MongoDB, creará una nueva base de datos e insertará su primer documento de producto. Esto establecerá la base de nuestro catálogo de productos.

Primero, abra el Shell de MongoDB (mongosh) para interactuar con la base de datos desde su terminal.

mongosh

Verá un prompt como test> que indica que está conectado al servidor MongoDB. Ahora, creemos y cambiemos a una nueva base de datos llamada product_catalog. En MongoDB, una base de datos se crea automáticamente cuando almacena datos en ella por primera vez.

use product_catalog

La salida switched to db product_catalog confirma que ahora está trabajando dentro de esta nueva base de datos.

A continuación, crearemos una colección llamada products e insertaremos un único documento en ella. Un documento en MongoDB es un objeto BSON, que se representa de forma similar a JSON. Utilizaremos el método insertOne().

db.products.insertOne({
  name: "Wireless Headphones",
  brand: "SoundWave",
  category: "Electronics",
  sku: "SW-HD-001"
});

Este comando inserta un documento con cuatro campos: name, brand, category y sku. La salida mostrará un reconocimiento y el _id único asignado al documento por MongoDB.

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Para verificar que el documento se creó correctamente, puede usar el método find() para recuperar todos los documentos de la colección products.

db.products.find();

La salida mostrará el documento que acaba de insertar, incluido su _id generado automáticamente.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001'
  }
]

Ahora ha creado con éxito su primer documento de producto. Continuaremos trabajando dentro del shell mongosh para los siguientes pasos.

Incrustar Información de Precio y Stock

Una ventaja clave del modelo de documentos de MongoDB es la capacidad de incrustar información relacionada dentro de un único documento. En este paso, actualizará el producto existente para incluir objetos anidados para los detalles de precios y existencias. Este enfoque mantiene todos los datos relevantes del producto juntos, lo que puede mejorar el rendimiento de las consultas al reducir la necesidad de búsquedas separadas.

Utilizaremos el método updateOne() para modificar el documento que creamos. Este método toma dos argumentos: un filtro para identificar el documento a actualizar y un operador de actualización que especifica los cambios.

Agregaremos un objeto price y un objeto stock. Usaremos el operador $set para agregar estos nuevos campos.

db.products.updateOne(
  { sku: "SW-HD-001" },
  {
    $set: {
      price: {
        base: 149.99,
        currency: "USD"
      },
      stock: {
        quantity: 250,
        inStock: true
      }
    }
  }
);

Analicemos este comando:

  • El primer objeto { sku: "SW-HD-001" } es el filtro. Le dice a MongoDB que encuentre el documento donde el campo sku sea "SW-HD-001".
  • El segundo objeto { $set: { ... } } es la operación de actualización. $set agrega nuevos campos o modifica los existentes. Aquí, estamos agregando los campos price y stock, que son en sí mismos documentos incrustados.

La salida confirmará que se encontró y modificó un documento.

{
  "acknowledged": true,
  "insertedId": null,
  "matchedCount": 1,
  "modifiedCount": 1,
  "upsertedCount": 0
}

Ahora, recuperemos el documento nuevamente para ver los cambios.

db.products.find({ sku: "SW-HD-001" });

La salida ahora muestra el producto con la información de price y stock recién incrustada. Esta estructura es más organizada e intuitiva que tener tablas separadas para precio y existencias en una base de datos relacional.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true }
  }
]

Usar Arrays para Atributos de Producto

Los productos a menudo tienen atributos que pueden tener múltiples valores, como colores disponibles, etiquetas para búsqueda o una lista de especificaciones. MongoDB maneja esto elegantemente con arrays. En este paso, agregará un array de etiquetas a su documento de producto.

Nuevamente utilizaremos el método updateOne() con el operador $set para agregar un nuevo campo llamado tags. Este campo contendrá un array de cadenas de texto.

db.products.updateOne(
  { sku: "SW-HD-001" },
  {
    $set: {
      tags: ["audio", "wireless", "over-ear", "noise-canceling"]
    }
  }
);

Este comando busca el producto con sku: "SW-HD-001" y le agrega un array tags. La salida confirmará nuevamente que se modificó un documento.

Para ver el resultado, consulte el documento una vez más.

db.products.find({ sku: "SW-HD-001" });

El documento actualizado ahora incluye el array tags. Almacenar estos valores en un array facilita la búsqueda de productos que tengan una etiqueta específica.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true },
    tags: [ 'audio', 'wireless', 'over-ear', 'noise-canceling' ]
  }
]

Los arrays son una característica poderosa para modelar relaciones de uno a muchos y almacenar listas de datos relacionados directamente dentro de un documento.

Añadir y Consultar Múltiples Productos

Un catálogo de productos contendrá muchos artículos. En este paso, aprenderá cómo agregar varios productos a la vez y luego realizar una consulta básica para filtrarlos.

Para agregar varios documentos a una colección simultáneamente, puede usar el método insertMany(). Este método toma un array de documentos como argumento. Agreguemos dos nuevos productos a nuestra colección products.

db.products.insertMany([
  {
    name: "Smartwatch",
    brand: "FitTech",
    category: "Electronics",
    sku: "FT-SW-005",
    price: { base: 199.99, currency: "USD" },
    stock: { quantity: 150, inStock: true },
    tags: ["wearable", "fitness", "smartwatch"]
  },
  {
    name: "Classic T-Shirt",
    brand: "UrbanWear",
    category: "Apparel",
    sku: "UW-TS-001",
    price: { base: 24.99, currency: "USD" },
    stock: { quantity: 500, inStock: true },
    tags: ["clothing", "cotton", "casual"]
  }
]);

La salida confirmará la operación y listará los valores de _id para los dos documentos recién insertados.

Ahora que tenemos varios productos, realicemos una consulta para encontrar solo los productos que pertenecen a la categoría "Electronics". Puede hacer esto pasando un objeto de filtro al método find().

db.products.find({ category: "Electronics" });

Este comando busca en la colección products y devuelve solo los documentos donde el campo category tiene el valor "Electronics".

La salida mostrará los dos productos electrónicos en nuestro catálogo: los "Wireless Headphones" y el "Smartwatch".

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true },
    tags: [ 'audio', 'wireless', 'over-ear', 'noise-canceling' ]
  },
  {
    _id: ObjectId('...'),
    name: 'Smartwatch',
    brand: 'FitTech',
    category: 'Electronics',
    sku: 'FT-SW-005',
    price: { base: 199.99, currency: 'USD' },
    stock: { quantity: 150, inStock: true },
    tags: [ 'wearable', 'fitness', 'smartwatch' ]
  }
]

Ahora ha practicado las operaciones básicas para administrar un catálogo de productos. Puede salir del shell de MongoDB.

exit;

Resumen

En este laboratorio, ha aprendido los principios fundamentales de estructuración de datos de productos en MongoDB. Comenzó creando una base de datos e insertando un documento de producto básico. Luego mejoró este documento incrustando datos relacionados, como información de precio y stock, en objetos anidados. También aprendió a usar arrays para manejar atributos con múltiples valores, como las etiquetas de producto. Finalmente, practicó la adición de múltiples documentos a una colección y la realización de una consulta básica para filtrar datos según un campo específico. Estas habilidades proporcionan una base sólida para construir modelos de datos flexibles y eficientes para aplicaciones de comercio electrónico y otros sistemas que utilizan MongoDB.