Diseñar un esquema de pedido de 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, diseñaremos un esquema de pedidos de MongoDB para una aplicación de comercio electrónico. Comenzaremos creando un documento estructurado para almacenar la información esencial de los pedidos, incluyendo el ID del pedido, los detalles del cliente, la fecha del pedido y el estado. Luego, expandiremos los detalles del cliente agregando una estructura de documentos anidados para capturar información detallada del cliente, como información personal y dirección. Finalmente, incluiremos los artículos del pedido, la información de pago y manejaremos las actualizaciones del estado del pedido para crear un esquema de pedido completo.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/ArrayandEmbeddedDocumentsGroup(["Array and Embedded Documents"]) mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb(("MongoDB")) -.-> mongodb/SchemaDesignGroup(["Schema Design"]) mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/BasicOperationsGroup -.-> mongodb/update_document("Update Document") mongodb/DataTypesGroup -.-> mongodb/work_with_array_data_types("Work with Array Data Types") 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") subgraph Lab Skills mongodb/insert_document -.-> lab-422080{{"Diseñar un esquema de pedido de MongoDB"}} mongodb/update_document -.-> lab-422080{{"Diseñar un esquema de pedido de MongoDB"}} mongodb/work_with_array_data_types -.-> lab-422080{{"Diseñar un esquema de pedido de MongoDB"}} mongodb/design_order_schema -.-> lab-422080{{"Diseñar un esquema de pedido de MongoDB"}} mongodb/create_embedded_documents -.-> lab-422080{{"Diseñar un esquema de pedido de MongoDB"}} mongodb/query_embedded_documents -.-> lab-422080{{"Diseñar un esquema de pedido de MongoDB"}} end

Crear estructura de pedido

En este paso, diseñaremos un esquema de pedido de MongoDB para una aplicación de comercio electrónico. Comenzaremos comprendiendo cómo crear un documento estructurado para almacenar información de pedido.

Primero, abre la shell de MongoDB abriendo la terminal y escribiendo:

mongosh

Ahora, creemos una base de datos para nuestros pedidos de comercio electrónico:

use ecommerce_orders

Diseñaremos una estructura de pedido con campos clave que capturen la información esencial de los pedidos:

db.orders.insertOne({
  order_id: "ORD-2024-001",
  customer: {
    customer_id: "CUST-123",
    name: "John Doe",
    email: "[email protected]"
  },
  order_date: new Date(),
  status: "pending"
});

Analicemos la estructura del pedido:

  • order_id: Un identificador único para el pedido
  • customer: Un documento incrustado con detalles del cliente
  • order_date: Marca de tiempo de la creación del pedido
  • status: Estado actual del pedido

Agregar detalles del cliente

En este paso, expandiremos nuestro esquema de pedido agregando detalles más exhaustivos del cliente a nuestro documento de MongoDB. Demonstraremos cómo crear una estructura de documentos anidados que capture información detallada del cliente.

Primero, asegúrese de que todavía esté en la shell de MongoDB del paso anterior. Si no es así, iníciela nuevamente:

mongosh ecommerce_orders

Actualicemos nuestro documento de pedido existente con información más detallada del cliente:

db.orders.updateOne(
  { order_id: "ORD-2024-001" },
  {
    $set: {
      customer: {
        customer_id: "CUST-123",
        personal_info: {
          first_name: "John",
          last_name: "Doe",
          email: "[email protected]",
          phone: "+1-555-123-4567"
        },
        address: {
          street: "123 Tech Lane",
          city: "San Francisco",
          state: "CA",
          postal_code: "94105",
          country: "USA"
        },
        contact_preferences: {
          email_notifications: true,
          sms_notifications: false
        }
      }
    }
  }
);

Verifiquemos el documento actualizado:

db.orders.findOne({ order_id: "ORD-2024-001" });

Este esquema de cliente expandido proporciona:

  • Información personal detallada
  • Detalles completos de la dirección
  • Preferencias de contacto
  • Estructura de documentos anidados para una mejor organización

La estructura anidada permite un almacenamiento de datos más flexible y exhaustivo en comparación con los esquemas planos.

Incluir artículos del pedido

En este paso, mejoraremos nuestro esquema de pedido agregando una lista exhaustiva de artículos del pedido. Demonstraremos cómo crear una matriz de elementos dentro de nuestro documento de pedido, capturando información detallada del producto.

Asegúrese de que todavía está en la shell de MongoDB:

mongosh ecommerce_orders

Ahora, actualicemos nuestro documento de pedido para incluir una matriz detallada de elementos:

db.orders.updateOne(
  { order_id: "ORD-2024-001" },
  {
    $set: {
      items: [
        {
          product_id: "PROD-001",
          name: "Wireless Headphones",
          category: "Electronics",
          price: 129.99,
          quantity: 1,
          subtotal: 129.99
        },
        {
          product_id: "PROD-002",
          name: "Laptop Sleeve",
          category: "Accessories",
          price: 24.5,
          quantity: 2,
          subtotal: 49.0
        }
      ],
      total_items: 2,
      subtotal: 178.99,
      tax: 14.32,
      total: 193.31
    }
  }
);

Verifiquemos el documento actualizado:

db.orders.findOne({ order_id: "ORD-2024-001" });

Características clave de este esquema de elementos:

  • Matriz de elementos con información detallada del producto
  • Cada elemento incluye el ID del producto, nombre, categoría, precio y cantidad
  • Subtotales calculados para cada elemento individual
  • Totales generales del pedido (conteo de elementos, subtotal, impuesto, total)

La estructura de matriz permite múltiples elementos en un solo pedido y ofrece flexibilidad para diferentes tipos de productos.

Establecer información de pago

En este paso, agregaremos información detallada de pago a nuestro esquema de pedido. Demonstraremos cómo crear una estructura de pago exhaustiva que capture varios detalles relacionados con el pago.

Asegúrese de que todavía está en la shell de MongoDB:

mongosh ecommerce_orders

Actualicemos nuestro documento de pedido con información de pago:

db.orders.updateOne(
  { order_id: "ORD-2024-001" },
  {
    $set: {
      payment: {
        method: "credit_card",
        card_info: {
          last_four: "4567",
          card_type: "Visa",
          payment_network: "Visa"
        },
        transaction: {
          transaction_id: "TXN-2024-001",
          amount: 193.31,
          currency: "USD",
          timestamp: new Date(),
          status: "completed"
        },
        billing_address: {
          street: "123 Tech Lane",
          city: "San Francisco",
          state: "CA",
          postal_code: "94105",
          country: "USA"
        }
      }
    }
  }
);

Verifiquemos el documento actualizado:

db.orders.findOne({ order_id: "ORD-2024-001" });

Características clave de este esquema de pago:

  • Detalles del método de pago
  • Información de tarjeta enmascarada
  • Especificos de la transacción
  • Dirección de facturación
  • Manejo seguro de datos de pago sensibles

La estructura anidada proporciona una vista exhaustiva del pago mientras mantiene segura la información sensible.

Manejar el estado del pedido

En este paso, mejoraremos nuestro esquema de pedido implementando un mecanismo de seguimiento exhaustivo del estado del pedido. Demonstraremos cómo crear un sistema de seguimiento de estado detallado que capture el ciclo de vida del pedido.

Asegúrese de que todavía está en la shell de MongoDB:

mongosh ecommerce_orders

Actualicemos nuestro documento de pedido con una estructura de seguimiento de estado avanzada:

db.orders.updateOne(
  { order_id: "ORD-2024-001" },
  {
    $set: {
      status_tracking: {
        current_status: "processing",
        status_history: [
          {
            status: "created",
            timestamp: new Date(Date.now() - 86400000), // 24 horas atrás
            notes: "Pedido inicialmente realizado"
          },
          {
            status: "processing",
            timestamp: new Date(),
            notes: "Pedido está siendo preparado para el envío"
          }
        ],
        fulfillment: {
          warehouse: "SF-01",
          estimated_shipping_date: new Date(Date.now() + 172800000), // 2 días a partir de ahora
          shipping_method: "standard"
        },
        tracking_number: null,
        expected_delivery: new Date(Date.now() + 432000000) // 5 días a partir de ahora
      }
    }
  }
);

Verifiquemos el documento actualizado:

db.orders.findOne({ order_id: "ORD-2024-001" });

Características clave de este esquema de seguimiento de estado:

  • Estado actual del pedido
  • Historia de estado exhaustiva
  • Detalles de cumplimiento
  • Fechas estimadas de envío y entrega
  • Mecanismo de seguimiento flexible

La estructura anidada permite un seguimiento detallado y actualizaciones de estado fáciles.

Resumen

En este laboratorio, aprendimos cómo diseñar un esquema de pedido de MongoDB para una aplicación de comercio electrónico. Primero, creamos un documento estructurado para almacenar la información esencial del pedido, incluyendo un ID de pedido único, detalles del cliente, fecha del pedido y estado del pedido. Luego, expandimos los detalles del cliente agregando una estructura de documentos anidados para capturar información detallada del cliente, como información personal y dirección. Además, incluimos artículos del pedido, información de pago y manejamos actualizaciones del estado del pedido. Al final de este laboratorio, teníamos un esquema de pedido de MongoDB exhaustivo que puede administrar efectivamente los pedidos de comercio electrónico.