Estruturar Dados de Produtos no MongoDB

MongoDBBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá os fundamentos do design de um esquema de documento estruturado para dados de produtos usando MongoDB. Para uma aplicação de e-commerce, um esquema bem projetado é crucial para o desempenho e escalabilidade. Você começará criando um documento de produto simples e o aprimorará progressivamente incorporando dados relacionados, como informações de preço e estoque, e usando arrays para atributos de múltiplos valores. Ao final deste laboratório, você terá uma compreensão sólida de como modelar dados de produtos de forma eficaz em um banco de dados MongoDB.

Criar um Documento de Produto Básico

Nesta primeira etapa, você se conectará ao servidor MongoDB, criará um novo banco de dados e inserirá seu primeiro documento de produto. Isso estabelecerá a base do nosso catálogo de produtos.

Primeiro, abra o MongoDB Shell (mongosh) para interagir com o banco de dados a partir do seu terminal.

mongosh

Você verá um prompt como test> indicando que você está conectado ao servidor MongoDB. Agora, vamos criar e alternar para um novo banco de dados chamado product_catalog. No MongoDB, um banco de dados é criado automaticamente quando você armazena dados nele pela primeira vez.

use product_catalog

A saída switched to db product_catalog confirma que você está agora trabalhando dentro deste novo banco de dados.

Em seguida, criaremos uma coleção chamada products e inseriremos um único documento nela. Um documento no MongoDB é um objeto BSON, que é representado como JSON. Usaremos o método insertOne().

db.products.insertOne({
  name: "Wireless Headphones",
  brand: "SoundWave",
  category: "Electronics",
  sku: "SW-HD-001"
});

Este comando insere um documento com quatro campos: name, brand, category e sku. A saída mostrará um reconhecimento e o _id único atribuído ao documento pelo MongoDB.

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Para verificar se o documento foi criado com sucesso, você pode usar o método find() para recuperar todos os documentos da coleção products.

db.products.find();

A saída exibirá o documento que você acabou de inserir, incluindo seu _id gerado automaticamente.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001'
  }
]

Você agora criou com sucesso seu primeiro documento de produto. Continuaremos trabalhando dentro do shell mongosh para as próximas etapas.

Incorporar Informações de Preço e Estoque

Uma vantagem chave do modelo de documento do MongoDB é a capacidade de incorporar informações relacionadas dentro de um único documento. Nesta etapa, você atualizará o produto existente para incluir objetos aninhados para detalhes de preço e estoque. Essa abordagem mantém todos os dados relevantes do produto juntos, o que pode melhorar o desempenho da consulta, reduzindo a necessidade de buscas separadas.

Usaremos o método updateOne() para modificar o documento que criamos. Este método recebe dois argumentos: um filtro para identificar o documento a ser atualizado e um operador de atualização que especifica as alterações.

Vamos adicionar um objeto price e um objeto stock. Usaremos o operador $set para adicionar esses novos campos.

db.products.updateOne(
  { sku: "SW-HD-001" },
  {
    $set: {
      price: {
        base: 149.99,
        currency: "USD"
      },
      stock: {
        quantity: 250,
        inStock: true
      }
    }
  }
);

Vamos detalhar este comando:

  • O primeiro objeto { sku: "SW-HD-001" } é o filtro. Ele diz ao MongoDB para encontrar o documento onde o campo sku é "SW-HD-001".
  • O segundo objeto { $set: { ... } } é a operação de atualização. $set adiciona novos campos ou modifica os existentes. Aqui, estamos adicionando os campos price e stock, que são eles próprios documentos incorporados.

A saída confirmará que um documento foi correspondido e modificado.

{
  "acknowledged": true,
  "insertedId": null,
  "matchedCount": 1,
  "modifiedCount": 1,
  "upsertedCount": 0
}

Agora, vamos recuperar o documento novamente para ver as alterações.

db.products.find({ sku: "SW-HD-001" });

A saída agora mostra o produto com as informações de price e stock recém-incorporadas. Essa estrutura é mais organizada e intuitiva do que ter tabelas separadas para preço e estoque em um banco de dados relacional.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true }
  }
]

Usar Arrays para Atributos de Produto

Produtos frequentemente possuem atributos que podem ter múltiplos valores, como cores disponíveis, tags para busca ou uma lista de especificações. O MongoDB lida com isso elegantemente com arrays. Nesta etapa, você adicionará um array de tags ao seu documento de produto.

Usaremos novamente o método updateOne() com o operador $set para adicionar um novo campo chamado tags. Este campo conterá um array de strings.

db.products.updateOne(
  { sku: "SW-HD-001" },
  {
    $set: {
      tags: ["audio", "wireless", "over-ear", "noise-canceling"]
    }
  }
);

Este comando encontra o produto com sku: "SW-HD-001" e adiciona um array tags a ele. A saída confirmará novamente que um documento foi modificado.

Para ver o resultado, consulte o documento mais uma vez.

db.products.find({ sku: "SW-HD-001" });

O documento atualizado agora inclui o array tags. Armazenar esses valores em um array facilita a consulta de produtos que possuem uma tag específica.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true },
    tags: [ 'audio', 'wireless', 'over-ear', 'noise-canceling' ]
  }
]

Arrays são um recurso poderoso para modelar relacionamentos um-para-muitos e armazenar listas de dados relacionados diretamente dentro de um documento.

Adicionar e Consultar Múltiplos Produtos

Um catálogo de produtos conterá muitos itens. Nesta etapa, você aprenderá como adicionar múltiplos produtos de uma vez e, em seguida, realizar uma consulta básica para filtrá-los.

Para adicionar múltiplos documentos a uma coleção simultaneamente, você pode usar o método insertMany(). Este método recebe um array de documentos como argumento. Vamos adicionar dois novos produtos à nossa coleção products.

db.products.insertMany([
  {
    name: "Smartwatch",
    brand: "FitTech",
    category: "Electronics",
    sku: "FT-SW-005",
    price: { base: 199.99, currency: "USD" },
    stock: { quantity: 150, inStock: true },
    tags: ["wearable", "fitness", "smartwatch"]
  },
  {
    name: "Classic T-Shirt",
    brand: "UrbanWear",
    category: "Apparel",
    sku: "UW-TS-001",
    price: { base: 24.99, currency: "USD" },
    stock: { quantity: 500, inStock: true },
    tags: ["clothing", "cotton", "casual"]
  }
]);

A saída confirmará a operação e listará os valores de _id para os dois documentos recém-inseridos.

Agora que temos múltiplos produtos, vamos realizar uma consulta para encontrar apenas os produtos que pertencem à categoria "Electronics". Você pode fazer isso passando um objeto de filtro para o método find().

db.products.find({ category: "Electronics" });

Este comando pesquisa na coleção products e retorna apenas os documentos onde o campo category tem o valor "Electronics".

A saída mostrará os dois produtos eletrônicos em nosso catálogo: os "Wireless Headphones" e o "Smartwatch".

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true },
    tags: [ 'audio', 'wireless', 'over-ear', 'noise-canceling' ]
  },
  {
    _id: ObjectId('...'),
    name: 'Smartwatch',
    brand: 'FitTech',
    category: 'Electronics',
    sku: 'FT-SW-005',
    price: { base: 199.99, currency: 'USD' },
    stock: { quantity: 150, inStock: true },
    tags: [ 'wearable', 'fitness', 'smartwatch' ]
  }
]

Você agora praticou as operações básicas para gerenciar um catálogo de produtos. Você pode sair do shell do MongoDB.

exit;

Resumo

Neste laboratório, você aprendeu os princípios fundamentais de estruturação de dados de produtos no MongoDB. Você começou criando um banco de dados e inserindo um documento de produto básico. Em seguida, aprimorou este documento incorporando dados relacionados, como informações de preço e estoque, em objetos aninhados. Você também aprendeu a usar arrays para lidar com atributos de múltiplos valores, como tags de produtos. Finalmente, você praticou a adição de múltiplos documentos a uma coleção e a realização de uma consulta básica para filtrar dados com base em um campo específico. Essas habilidades fornecem uma base sólida para a construção de modelos de dados flexíveis e eficientes para aplicações de e-commerce e outros sistemas que utilizam MongoDB.