Estructurar los datos de productos en MongoDB

MongoDBMongoDBBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá a diseñar un esquema de documentos de MongoDB estructurado para los datos de productos en un sistema de comercio electrónico. El laboratorio cubre los pasos esenciales, como crear un esquema de producto, agregar información de categorías, incluir detalles de precios, establecer niveles de stock y controlar el estado de los productos. Al final de este laboratorio, tendrá una comprensión integral de cómo modelar efectivamente los datos de productos en una base de datos de MongoDB.

El laboratorio comienza creando un esquema de producto que captura varios detalles de producto, como nombre, categoría, marca, precios, información de stock, especificaciones y metadatos. Aprenderá a aprovechar la estructura flexible de documentos de MongoDB para representar datos de productos complejos. Además, el laboratorio demuestra cómo administrar el estado de los productos y habilitar un filtrado y visualización eficientes de la información de productos.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/SchemaDesignGroup(["Schema Design"]) mongodb(("MongoDB")) -.-> mongodb/ArrayandEmbeddedDocumentsGroup(["Array and Embedded Documents"]) mongodb(("MongoDB")) -.-> mongodb/RelationshipsGroup(["Relationships"]) mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/BasicOperationsGroup -.-> mongodb/update_document("Update Document") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/SchemaDesignGroup -.-> mongodb/design_order_schema("Design Order Schema") mongodb/ArrayandEmbeddedDocumentsGroup -.-> mongodb/create_embedded_documents("Create Embedded Documents") mongodb/ArrayandEmbeddedDocumentsGroup -.-> mongodb/query_embedded_documents("Query Embedded Documents") mongodb/RelationshipsGroup -.-> mongodb/link_related_documents("Link Related Documents") subgraph Lab Skills mongodb/insert_document -.-> lab-422092{{"Estructurar los datos de productos en MongoDB"}} mongodb/update_document -.-> lab-422092{{"Estructurar los datos de productos en MongoDB"}} mongodb/find_documents -.-> lab-422092{{"Estructurar los datos de productos en MongoDB"}} mongodb/design_order_schema -.-> lab-422092{{"Estructurar los datos de productos en MongoDB"}} mongodb/create_embedded_documents -.-> lab-422092{{"Estructurar los datos de productos en MongoDB"}} mongodb/query_embedded_documents -.-> lab-422092{{"Estructurar los datos de productos en MongoDB"}} mongodb/link_related_documents -.-> lab-422092{{"Estructurar los datos de productos en MongoDB"}} end

Crear esquema de producto

En este paso, aprenderá a diseñar un esquema de documentos de MongoDB estructurado para los datos de productos. Crearemos un esquema flexible y completo que pueda representar varios tipos de productos en un sistema de comercio electrónico.

Primero, iniciemos la shell de MongoDB:

mongosh

Ahora, creemos una base de datos para nuestro catálogo de productos:

use product_catalog

Diseñaremos un esquema de producto que incluye múltiples campos para capturar información detallada de los productos:

db.products.insertOne({
  name: "Audífonos inalámbricos con cancelación de ruido",
  category: "Electrónica",
  subcategory: "Audio",
  brand: "TechSound",
  price: {
    base: 199.99,
    currency: "USD",
    discount: {
      percentage: 10,
      active: true
    }
  },
  stock: {
    total: 500,
    available: 450,
    warehouse: "Centro de Distribución Principal"
  },
  specifications: {
    color: ["Negro", "Plata"],
    batteryLife: "30 horas",
    connectivity: ["Bluetooth 5.0", "3.5mm Jack"]
  },
  status: {
    inStock: true,
    featured: false,
    new: true
  },
  metadata: {
    sku: "TECH-SOUND-NC-001",
    dateAdded: new Date(),
    lastUpdated: new Date()
  }
});

Analicemos el esquema:

  1. Información básica del producto:

    • name: Título del producto
    • category y subcategory: Clasificación jerárquica
    • brand: Información del fabricante
  2. Detalles de precios:

    • Objeto anidado price con precio base, moneda y información de descuento
  3. Gestión de stock:

    • Objeto stock que registra el inventario total y disponible
    • Ubicación del almacén
  4. Especificaciones del producto:

    • Objeto flexible specifications para atributos detallados del producto
    • Admite múltiples valores (como colores)
  5. Estado del producto:

    • Objeto status para la lógica de filtrado rápido y visualización
  6. Metadatos:

    • Registro de información adicional como SKU y timestamps

Para verificar nuestro documento, recuperémoslo:

db.products.find({ name: "Audífonos inalámbricos con cancelación de ruido" });

Agregar información de categorías

En este paso, expandiremos nuestro esquema de producto creando un sistema de gestión de categorías completo. Demonstraremos cómo agregar información detallada de categorías a nuestros documentos de producto y crear una colección separada de categorías para una mejor organización.

Primero, continuemos en la shell de MongoDB:

mongosh product_catalog

Creamos una colección dedicada de categorías para administrar jerárquicamente las categorías de productos:

db.categories.insertMany([
  {
    _id: "electrónica",
    name: "Electrónica",
    description: "Todos los dispositivos y gadgets eléctronicos",
    parent: null,
    subcategories: ["audio", "computadoras", "teléfonos inteligentes"]
  },
  {
    _id: "audio",
    name: "Audio",
    description: "Equipamiento de sonido y audio",
    parent: "electrónica",
    attributes: [
      "inalámbrico",
      "cancelación de ruido",
      "duración de la batería",
      "conexión"
    ]
  }
]);

Ahora, actualicemos nuestro documento de producto anterior para referenciar estas categorías:

db.products.updateOne(
  { name: "Audífonos inalámbricos con cancelación de ruido" },
  {
    $set: {
      categoryRef: {
        main: "electrónica",
        sub: "audio"
      },
      categoryDetails: {
        path: ["electrónica", "audio"],
        taxonomyVersion: "1.0"
      }
    }
  }
);

Verifiquemos el documento de producto actualizado:

db.products.findOne({
  name: "Audífonos inalámbricos con cancelación de ruido"
});

Este enfoque ofrece varios beneficios:

  1. Gestión de categorías separada
  2. Estructura jerárquica de categorías
  3. Seguimiento flexible de atributos
  4. Categorización y filtrado fáciles

Incluir detalles de precios

En este paso, mejoraremos nuestro esquema de producto creando una estructura de precios completa que admita múltiples escenarios de precios y gestión de monedas.

Primero, continuemos en la shell de MongoDB:

mongosh product_catalog

Crearemos un modelo de precios más detallado con múltiples estrategias de precios:

db.products.updateOne(
  { name: "Audífonos inalámbricos con cancelación de ruido" },
  {
    $set: {
      pricing: {
        base: {
          amount: 199.99,
          currency: "USD"
        },
        retail: {
          amount: 219.99,
          currency: "USD"
        },
        discounts: [
          {
            type: "ESTACIONAL",
            percentage: 10,
            startDate: new Date("2024-01-01"),
            endDate: new Date("2024-01-31")
          },
          {
            type: "LEALTAD",
            percentage: 5,
            conditions: "Para miembros con 1+ año de membresía"
          }
        ],
        taxRates: {
          standard: 0.08,
          reduced: 0.05
        },
        priceHistory: [
          {
            date: new Date("2023-12-01"),
            amount: 189.99
          },
          {
            date: new Date("2024-01-01"),
            amount: 199.99
          }
        ]
      }
    }
  }
);

Creamos una colección de precios separada para estrategias de precios más complejas:

db.pricing_rules.insertOne({
  productId: "TECH-SOUND-NC-001",
  dynamicPricing: {
    enabled: true,
    algorithm: "supply-demand",
    minPrice: 150.0,
    maxPrice: 250.0
  },
  bulkPricing: [
    {
      quantity: { min: 1, max: 10 },
      discount: 0
    },
    {
      quantity: { min: 11, max: 50 },
      discount: 0.05
    },
    {
      quantity: { min: 51 },
      discount: 0.1
    }
  ]
});

Verifique los precios actualizados del producto:

db.products.findOne({
  name: "Audífonos inalámbricos con cancelación de ruido"
});

Establecer niveles de stock

En este paso, desarrollaremos un sistema de gestión de inventario sofisticado para rastrear el stock de productos en múltiples almacenes y ubicaciones.

Primero, continuemos en la shell de MongoDB:

mongosh product_catalog

Crearemos un esquema de gestión de stock completo:

db.products.updateOne(
  { name: "Audífonos inalámbricos con cancelación de ruido" },
  {
    $set: {
      inventory: {
        total: {
          quantity: 1000,
          unit: "piezas"
        },
        warehouses: [
          {
            name: "Centro de Distribución Principal",
            location: "Nueva York",
            quantity: 500,
            status: "primario"
          },
          {
            name: "Almacén de la Costa Oeste",
            location: "Los Ángeles",
            quantity: 300,
            status: "secundario"
          },
          {
            name: "Centro de Ejecución en Línea",
            location: "Chicago",
            quantity: 200,
            status: "de respaldo"
          }
        ],
        tracking: {
          minimumStockLevel: 100,
          restockThreshold: 250,
          lastRestocked: new Date()
        },
        reservations: [
          {
            type: "pedidos en línea",
            quantity: 50,
            reservedUntil: new Date(Date.now() + 24 * 60 * 60 * 1000)
          }
        ]
      }
    }
  }
);

Creamos una colección separada de seguimiento de inventario:

db.inventory_logs.insertOne({
  productId: "TECH-SOUND-NC-001",
  transactionHistory: [
    {
      date: new Date(),
      type: "stock inicial",
      quantity: 1000,
      source: "fabricante",
      notes: "Inventario de lanzamiento inicial del producto"
    }
  ],
  stockAdjustments: [
    {
      date: new Date(),
      reason: "Preparación estacional",
      quantityAdjusted: 100,
      direction: "aumento"
    }
  ]
});

Verifique el inventario de producto actualizado:

db.products.findOne({
  name: "Audífonos inalámbricos con cancelación de ruido"
});

Registrar el estado del producto

En este paso, implementaremos un sistema de seguimiento de estado de producto completo que proporciona información detallada sobre el ciclo de vida del producto, el estado de marketing y las métricas de rendimiento.

Primero, continuemos en la shell de MongoDB:

mongosh product_catalog

Actualizaremos nuestro documento de producto con un mecanismo de seguimiento de estado avanzado:

db.products.updateOne(
  { name: "Audífonos inalámbricos con cancelación de ruido" },
  {
    $set: {
      productStatus: {
        lifecycle: {
          stage: "activo",
          introduced: new Date("2024-01-01"),
          expectedEndOfLife: new Date("2025-12-31")
        },
        marketingStatus: {
          featured: true,
          newArrival: false,
          onSale: true,
          promotionActive: true
        },
        performanceMetrics: {
          salesVolume: {
            monthly: 1500,
            quarterly: 4500,
            yearly: 18000
          },
          customerRatings: {
            average: 4.7,
            totalReviews: 250,
            recommendationRate: 0.92
          }
        },
        complianceAndCertification: {
          regulatoryApprovals: ["FCC", "CE", "RoHS"],
          warrantyInfo: {
            duration: "2 años",
            type: "fabricante"
          }
        },
        digitalPresence: {
          websiteVisibility: {
            pageViews: 50000,
            uniqueVisitors: 15000
          },
          ecommercePlatforms: ["company_website", "amazon", "best_buy"]
        }
      }
    }
  }
);

Cree una colección separada para el seguimiento de estado de producto y los datos históricos:

db.product_status_history.insertOne({
  productId: "TECH-SOUND-NC-001",
  statusChanges: [
    {
      date: new Date(),
      previousStatus: "desarrollo",
      newStatus: "activo",
      reason: "Lanzamiento del producto",
      updatedBy: "equipo de gestión de productos"
    }
  ],
  performanceSnapshots: [
    {
      date: new Date(),
      salesVolume: 1500,
      customerSatisfaction: 4.7
    }
  ]
});

Verifique el estado actualizado del producto:

db.products.findOne({
  name: "Audífonos inalámbricos con cancelación de ruido"
});

Resumen

En este laboratorio, aprendiste cómo diseñar un esquema de documentos de MongoDB estructurado para datos de productos. Creaste un esquema flexible y completo que puede representar varios tipos de productos en un sistema de comercio electrónico. El esquema incluye campos para información básica de productos, detalles de precios, gestión de existencias, especificaciones de productos, estado y metadatos. Esto permite el almacenamiento y recuperación eficientes de datos detallados de productos dentro de una base de datos de MongoDB.

El esquema cubre aspectos clave de los datos de productos, como la categorización jerárquica, los precios con descuentos, el seguimiento de inventario, las especificaciones detalladas e indicadores de estado. Este enfoque estructurado permite una gestión efectiva de productos y apoya varios casos de uso en una aplicación de comercio electrónico.