结构化 MongoDB 产品数据

MongoDBMongoDBBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何为电子商务系统中的产品数据设计一个结构化的 MongoDB 文档模式。实验涵盖了关键步骤,包括创建产品模式、添加类别信息、包含价格详情、设置库存水平以及跟踪产品状态。通过本实验,你将全面了解如何在 MongoDB 数据库中有效地建模产品数据。

实验首先创建一个产品模式,该模式捕获各种产品详细信息,如名称、类别、品牌、定价、库存信息、规格和元数据。你将学习如何利用 MongoDB 的灵活文档结构来表示复杂的产品数据。此外,实验还演示了如何管理产品状态,并实现产品信息的高效过滤和展示。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL 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(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic 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{{"结构化 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:产品标题
    • categorysubcategory:层级分类
    • 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 文档模式。你创建了一个灵活且全面的模式,能够表示电子商务系统中各种类型的产品。该模式包含基本产品信息、价格详情、库存管理、产品规格、状态和元数据的字段。这使得在 MongoDB 数据库中能够高效存储和检索详细的产品数据。

该模式涵盖了产品数据的关键方面,例如分层分类、带折扣的定价、库存跟踪、详细规格和状态指示器。这种结构化的方法支持有效的产品管理,并满足电子商务应用中的各种用例需求。