Estruturar Dados de Produtos no MongoDB

MongoDBMongoDBBeginner
Pratique Agora

💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês

Introdução

Neste laboratório, você aprenderá como projetar um esquema de documento MongoDB estruturado para dados de produtos em um sistema de comércio eletrônico. O laboratório cobre as etapas essenciais, incluindo a criação de um esquema de produto, a adição de informações de categoria, a inclusão de detalhes de preço, a definição de níveis de estoque e o rastreamento do status do produto. Ao final deste laboratório, você terá uma compreensão abrangente de como modelar dados de produtos de forma eficaz em um banco de dados MongoDB.

O laboratório começa com a criação de um esquema de produto que captura vários detalhes do produto, como nome, categoria, marca, preços, informações de estoque, especificações e metadados. Você aprenderá como aproveitar a estrutura de documento flexível do MongoDB para representar dados de produtos complexos. Além disso, o laboratório demonstra como gerenciar o status do produto e permitir a filtragem e exibição eficientes de informações do produto.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/SchemaDesignGroup(["Schema Design"]) mongodb(("MongoDB")) -.-> mongodb/ArrayandEmbeddedDocumentsGroup(["Array and Embedded Documents"]) mongodb(("MongoDB")) -.-> mongodb/RelationshipsGroup(["Relationships"]) mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) 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{{"Estruturar Dados de Produtos no MongoDB"}} mongodb/update_document -.-> lab-422092{{"Estruturar Dados de Produtos no MongoDB"}} mongodb/find_documents -.-> lab-422092{{"Estruturar Dados de Produtos no MongoDB"}} mongodb/design_order_schema -.-> lab-422092{{"Estruturar Dados de Produtos no MongoDB"}} mongodb/create_embedded_documents -.-> lab-422092{{"Estruturar Dados de Produtos no MongoDB"}} mongodb/query_embedded_documents -.-> lab-422092{{"Estruturar Dados de Produtos no MongoDB"}} mongodb/link_related_documents -.-> lab-422092{{"Estruturar Dados de Produtos no MongoDB"}} end

Criar Esquema de Produto

Nesta etapa, você aprenderá como projetar um esquema de documento MongoDB estruturado para dados de produtos. Criaremos um esquema flexível e abrangente que pode representar vários tipos de produtos em um sistema de comércio eletrônico.

Primeiro, vamos iniciar o shell do MongoDB:

mongosh

Agora, vamos criar um banco de dados para o nosso catálogo de produtos:

use product_catalog

Projetaremos um esquema de produto que inclui vários campos para capturar informações completas do produto:

db.products.insertOne({
  name: "Wireless Noise-Canceling Headphones",
  category: "Electronics",
  subcategory: "Audio",
  brand: "TechSound",
  price: {
    base: 199.99,
    currency: "USD",
    discount: {
      percentage: 10,
      active: true
    }
  },
  stock: {
    total: 500,
    available: 450,
    warehouse: "Main Distribution Center"
  },
  specifications: {
    color: ["Black", "Silver"],
    batteryLife: "30 hours",
    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()
  }
});

Vamos detalhar o esquema:

  1. Informações Básicas do Produto:

    • name: Título do produto
    • category e subcategory: Classificação hierárquica
    • brand: Informações do fabricante
  2. Detalhes de Preço:

    • Objeto price aninhado com preço base, moeda e informações de desconto
  3. Gerenciamento de Estoque:

    • Objeto stock rastreando o estoque total e disponível
    • Localização do armazém
  4. Especificações do Produto:

    • Objeto specifications flexível para atributos detalhados do produto
    • Suporta múltiplos valores (como cores)
  5. Status do Produto:

    • Objeto status para filtragem rápida e lógica de exibição
  6. Metadados:

    • Rastreamento de informações adicionais como SKU e timestamps

Para verificar nosso documento, vamos recuperá-lo:

db.products.find({ name: "Wireless Noise-Canceling Headphones" });

Adicionar Informações de Categoria

Nesta etapa, expandiremos nosso esquema de produto criando um sistema abrangente de gerenciamento de categorias. Demonstraremos como adicionar informações detalhadas de categoria aos nossos documentos de produto e criar uma coleção de categorias separada para melhor organização.

Primeiro, vamos continuar no shell do MongoDB:

mongosh product_catalog

Vamos criar uma coleção de categorias dedicada para gerenciar as categorias de produtos hierarquicamente:

db.categories.insertMany([
  {
    _id: "electronics",
    name: "Electronics",
    description: "All electronic devices and gadgets",
    parent: null,
    subcategories: ["audio", "computers", "smartphones"]
  },
  {
    _id: "audio",
    name: "Audio",
    description: "Sound and audio equipment",
    parent: "electronics",
    attributes: ["wireless", "noise-canceling", "battery-life", "connectivity"]
  }
]);

Agora, vamos atualizar nosso documento de produto anterior para referenciar essas categorias:

db.products.updateOne(
  { name: "Wireless Noise-Canceling Headphones" },
  {
    $set: {
      categoryRef: {
        main: "electronics",
        sub: "audio"
      },
      categoryDetails: {
        path: ["electronics", "audio"],
        taxonomyVersion: "1.0"
      }
    }
  }
);

Vamos verificar o documento de produto atualizado:

db.products.findOne({ name: "Wireless Noise-Canceling Headphones" });

Essa abordagem oferece vários benefícios:

  1. Gerenciamento de categoria separado
  2. Estrutura de categoria hierárquica
  3. Rastreamento de atributos flexível
  4. Fácil categorização e filtragem

Incluir Detalhes de Preço

Nesta etapa, aprimoraremos nosso esquema de produto criando uma estrutura de preços abrangente que suporte múltiplos cenários de preços e gerenciamento de moeda.

Primeiro, vamos continuar no shell do MongoDB:

mongosh product_catalog

Criaremos um modelo de preços mais detalhado com múltiplas estratégias de preços:

db.products.updateOne(
  { name: "Wireless Noise-Canceling Headphones" },
  {
    $set: {
      pricing: {
        base: {
          amount: 199.99,
          currency: "USD"
        },
        retail: {
          amount: 219.99,
          currency: "USD"
        },
        discounts: [
          {
            type: "SEASONAL",
            percentage: 10,
            startDate: new Date("2024-01-01"),
            endDate: new Date("2024-01-31")
          },
          {
            type: "LOYALTY",
            percentage: 5,
            conditions: "For members with 1+ year membership"
          }
        ],
        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
          }
        ]
      }
    }
  }
);

Vamos criar uma coleção de preços separada para estratégias de preços mais complexas:

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 os preços do produto atualizados:

db.products.findOne({ name: "Wireless Noise-Canceling Headphones" });

Definir Níveis de Estoque

Nesta etapa, desenvolveremos um sistema sofisticado de gerenciamento de inventário para rastrear o estoque de produtos em vários armazéns e locais.

Primeiro, vamos continuar no shell do MongoDB:

mongosh product_catalog

Criaremos um esquema abrangente de gerenciamento de estoque:

db.products.updateOne(
  { name: "Wireless Noise-Canceling Headphones" },
  {
    $set: {
      inventory: {
        total: {
          quantity: 1000,
          unit: "pieces"
        },
        warehouses: [
          {
            name: "Main Distribution Center",
            location: "New York",
            quantity: 500,
            status: "primary"
          },
          {
            name: "West Coast Warehouse",
            location: "Los Angeles",
            quantity: 300,
            status: "secondary"
          },
          {
            name: "Online Fulfillment Center",
            location: "Chicago",
            quantity: 200,
            status: "backup"
          }
        ],
        tracking: {
          minimumStockLevel: 100,
          restockThreshold: 250,
          lastRestocked: new Date()
        },
        reservations: [
          {
            type: "online_orders",
            quantity: 50,
            reservedUntil: new Date(Date.now() + 24 * 60 * 60 * 1000)
          }
        ]
      }
    }
  }
);

Vamos criar uma coleção separada de rastreamento de inventário:

db.inventory_logs.insertOne({
  productId: "TECH-SOUND-NC-001",
  transactionHistory: [
    {
      date: new Date(),
      type: "initial_stock",
      quantity: 1000,
      source: "manufacturer",
      notes: "Initial product launch inventory"
    }
  ],
  stockAdjustments: [
    {
      date: new Date(),
      reason: "Seasonal Preparation",
      quantityAdjusted: 100,
      direction: "increase"
    }
  ]
});

Verifique o inventário do produto atualizado:

db.products.findOne({ name: "Wireless Noise-Canceling Headphones" });

Rastrear o Status do Produto

Nesta etapa, implementaremos um sistema abrangente de rastreamento do status do produto que fornece informações detalhadas sobre o ciclo de vida do produto, o status de marketing e as métricas de desempenho.

Primeiro, vamos continuar no shell do MongoDB:

mongosh product_catalog

Atualizaremos nosso documento de produto com um mecanismo avançado de rastreamento de status:

db.products.updateOne(
  { name: "Wireless Noise-Canceling Headphones" },
  {
    $set: {
      productStatus: {
        lifecycle: {
          stage: "active",
          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 years",
            type: "manufacturer"
          }
        },
        digitalPresence: {
          websiteVisibility: {
            pageViews: 50000,
            uniqueVisitors: 15000
          },
          ecommercePlatforms: ["company_website", "amazon", "best_buy"]
        }
      }
    }
  }
);

Crie uma coleção separada para rastreamento do status do produto e dados históricos:

db.product_status_history.insertOne({
  productId: "TECH-SOUND-NC-001",
  statusChanges: [
    {
      date: new Date(),
      previousStatus: "development",
      newStatus: "active",
      reason: "Product launch",
      updatedBy: "product_management_team"
    }
  ],
  performanceSnapshots: [
    {
      date: new Date(),
      salesVolume: 1500,
      customerSatisfaction: 4.7
    }
  ]
});

Verifique o status do produto atualizado:

db.products.findOne({ name: "Wireless Noise-Canceling Headphones" });

Resumo

Neste laboratório, você aprendeu a projetar um esquema de documento MongoDB estruturado para dados de produtos. Você criou um esquema flexível e abrangente que pode representar vários tipos de produtos em um sistema de comércio eletrônico. O esquema inclui campos para informações básicas do produto, detalhes de preços, gerenciamento de estoque, especificações do produto, status e metadados. Isso permite o armazenamento e a recuperação eficientes de dados detalhados do produto dentro de um banco de dados MongoDB.

O esquema abrange aspectos-chave dos dados do produto, como categorização hierárquica, preços com descontos, rastreamento de inventário, especificações detalhadas e indicadores de status. Essa abordagem estruturada permite o gerenciamento eficaz do produto e suporta vários casos de uso em uma aplicação de comércio eletrônico.

OSZAR »