Структурирование данных о продуктах в MongoDB

MongoDBMongoDBBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе вы научитесь проектировать структурированную схему документов MongoDB для данных о продуктах в системе электронной коммерции. Лаб涵盖了基本步骤,包括创建产品架构、添加类别信息、包括价格细节、设置库存水平以及跟踪产品状态。По завершении этого лабе вы будете иметь глубокое понимание того, как эффективно моделировать данные о продуктах в базе данных MongoDB.

Лаб начинается с создания схемы продукта, которая включает в себя различные детали продукта, такие как название, категория, бренд, цена, информация о наличии, спецификации и метаданные. Вы научитесь использовать гибкую структуру документов MongoDB для представления сложных данных о продуктах. Кроме того, лаб демонстрирует, как управлять статусом продукта и обеспечивать эффективную фильтрацию и отображение информации о продуктах.


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{{"Структурирование данных о продуктах в MongoDB"}} mongodb/update_document -.-> lab-422092{{"Структурирование данных о продуктах в MongoDB"}} mongodb/find_documents -.-> lab-422092{{"Структурирование данных о продуктах в MongoDB"}} mongodb/design_order_schema -.-> lab-422092{{"Структурирование данных о продуктах в MongoDB"}} mongodb/create_embedded_documents -.-> lab-422092{{"Структурирование данных о продуктах в MongoDB"}} mongodb/query_embedded_documents -.-> lab-422092{{"Структурирование данных о продуктах в MongoDB"}} mongodb/link_related_documents -.-> lab-422092{{"Структурирование данных о продуктах в MongoDB"}} end

Создать схему продукта

В этом шаге вы научитесь проектировать структурированную схему документов MongoDB для данных о продуктах. Мы создадим гибкую и полную схему, которая может представлять различные типы продуктов в системе электронной коммерции.

Сначала запустим MongoDB shell:

mongosh

Теперь создадим базу данных для нашего каталога продуктов:

use product_catalog

Мы разработаем схему продукта, которая включает несколько полей для получения полной информации о продукте:

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

Разберём схему:

  1. Основная информация о продукте:

    • name: Название продукта
    • category и subcategory: Иерархическая классификация
    • brand: Информация о производителе
  2. Детали цены:

    • Вложенный объект price с базовой ценой, валютой и информацией о скидке
  3. Управление запасами:

    • Объект stock, отслеживающий общий и доступный товарный запас
    • Местонахождение склада
  4. Технические характеристики продукта:

    • Гибкий объект specifications для детальных атрибутов продукта
    • Поддерживает несколько значений (например, цвета)
  5. Статус продукта:

    • Объект status для быстрой фильтрации и логики отображения
  6. Метаданные:

    • Отслеживание дополнительной информации, такой как SKU и метки времени

Для проверки нашего документа вытащим его:

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

Добавить информацию о категории

В этом шаге мы расширим нашу схему продукта, создав комплексную систему управления категориями. Мы покажем, как добавить детальную информацию о категориях в наши документы о продуктах и создать отдельную коллекцию категорий для лучшей организации.

Сначала продолжим работу в MongoDB shell:

mongosh product_catalog

Создадим специальную коллекцию категорий для иерархического управления категориями продуктов:

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

Теперь обновим наш предыдущий документ о продукте, чтобы ссылаться на эти категории:

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

Проверим обновлённый документ о продукте:

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

Данный подход обладает рядом преимуществ:

  1. Отдельное управление категориями
  2. Иерархическая структура категорий
  3. Гибкая отслеживание атрибутов
  4. Простая категоризация и фильтрация

Включить детали цены

В этом шаге мы усовершенствуем нашу схему продукта, создав комплексную структуру цен, которая поддерживает несколько сценариев ценования и управление валютами.

Сначала продолжим работу в MongoDB shell:

mongosh product_catalog

Мы создадим более детальную модель ценования с несколькими стратегиями ценования:

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

Создадим отдельную коллекцию для более сложных стратегий ценования:

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

Проверим обновлённое ценообразование продукта:

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

Установить уровни запаса

В этом шаге мы разработаем сложную систему управления запасами для отслеживания товарного запаса продукта на нескольких складах и в различных местах.

Сначала продолжим работу в MongoDB shell:

mongosh product_catalog

Мы создадим комплексную схему управления запасами:

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

Создадим отдельную коллекцию для отслеживания запасов:

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

Проверим обновлённый товарный запас продукта:

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

Отслеживать статус продукта

В этом шаге мы реализуем комплексную систему отслеживания статуса продукта, которая предоставляет подробные洞悉 по жизненному циклу продукта, маркетинговому статусу и метрикам производительности.

Сначала продолжим работу в MongoDB shell:

mongosh product_catalog

Мы обновим наш документ о продукте с помощью продвинутой механики отслеживания статуса:

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

Создадим отдельную коллекцию для отслеживания статуса продукта и исторических данных:

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

Проверим обновлённый статус продукта:

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

Резюме

В этом практическом занятии вы узнали, как проектировать структурированную схему документов MongoDB для данных о продуктах. Вы создали гибкую и комплексную схему, которая может представлять различные типы продуктов в системе электронной коммерции. Схема включает поля для основных сведений о продукте, деталей ценования, управления запасами, спецификаций продукта, статуса и метаданных. Это позволяет эффективно хранить и получать детailed данные о продуктах в базе данных MongoDB.

Схема охватывает ключевые аспекты данных о продуктах, такие как иерархическая категоризация, ценообразование с учетом скидок, отслеживание запасов, подробные спецификации и индикаторы статуса. Этот структурированный подход позволяет эффективно управлять продуктами и поддерживает различные сценарии использования в приложении электронной коммерции.

OSZAR »