Structure des données produit MongoDB

MongoDBBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez les bases de la conception d'un schéma de document structuré pour les données de produits à l'aide de MongoDB. Pour une application e-commerce, un schéma bien conçu est crucial pour les performances et la scalabilité. Vous commencerez par créer un document produit simple et l'améliorerez progressivement en intégrant des données connexes comme les informations de prix et de stock, et en utilisant des tableaux pour les attributs à valeurs multiples. À la fin de ce laboratoire, vous aurez une solide compréhension de la manière de modéliser efficacement les données de produits dans une base de données MongoDB.

Créer un document produit de base

Dans cette première étape, vous allez vous connecter au serveur MongoDB, créer une nouvelle base de données et insérer votre premier document produit. Cela établira la base de notre catalogue de produits.

Tout d'abord, ouvrez le MongoDB Shell (mongosh) pour interagir avec la base de données depuis votre terminal.

mongosh

Vous verrez une invite telle que test> indiquant que vous êtes connecté au serveur MongoDB. Maintenant, créons et basculons vers une nouvelle base de données nommée product_catalog. Dans MongoDB, une base de données est créée automatiquement lorsque vous y stockez des données pour la première fois.

use product_catalog

La sortie switched to db product_catalog confirme que vous travaillez maintenant dans cette nouvelle base de données.

Ensuite, nous allons créer une collection nommée products et y insérer un seul document. Un document dans MongoDB est un objet BSON, qui est représenté comme du JSON. Nous utiliserons la méthode insertOne().

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

Cette commande insère un document avec quatre champs : name, brand, category et sku. La sortie affichera une confirmation et l'_id unique attribué au document par MongoDB.

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

Pour vérifier que le document a été créé avec succès, vous pouvez utiliser la méthode find() pour récupérer tous les documents de la collection products.

db.products.find();

La sortie affichera le document que vous venez d'insérer, y compris son _id généré automatiquement.

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

Vous avez maintenant créé avec succès votre premier document produit. Nous continuerons à travailler dans le shell mongosh pour les étapes suivantes.

Intégrer les informations de prix et de stock

Un avantage clé du modèle de document de MongoDB est la capacité d'intégrer des informations connexes au sein d'un seul document. Dans cette étape, vous allez mettre à jour le produit existant pour inclure des objets imbriqués pour les détails de prix et de stock. Cette approche permet de conserver toutes les données pertinentes du produit ensemble, ce qui peut améliorer les performances des requêtes en réduisant le besoin de recherches séparées.

Nous utiliserons la méthode updateOne() pour modifier le document que nous avons créé. Cette méthode prend deux arguments : un filtre pour identifier le document à mettre à jour, et un opérateur de mise à jour qui spécifie les modifications.

Ajoutons un objet price et un objet stock. Nous utiliserons l'opérateur $set pour ajouter ces nouveaux champs.

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

Analysons cette commande :

  • Le premier objet { sku: "SW-HD-001" } est le filtre. Il indique à MongoDB de trouver le document où le champ sku est "SW-HD-001".
  • Le second objet { $set: { ... } } est l'opération de mise à jour. $set ajoute de nouveaux champs ou modifie ceux qui existent. Ici, nous ajoutons les champs price et stock, qui sont eux-mêmes des documents imbriqués.

La sortie confirmera qu'un document a été trouvé et modifié.

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

Maintenant, récupérons à nouveau le document pour voir les changements.

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

La sortie affiche maintenant le produit avec les informations price et stock nouvellement intégrées. Cette structure est plus organisée et intuitive que d'avoir des tables séparées pour le prix et le stock dans une base de données relationnelle.

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

Utiliser des tableaux pour les attributs produit

Les produits ont souvent des attributs qui peuvent avoir plusieurs valeurs, tels que les couleurs disponibles, les tags pour la recherche, ou une liste de spécifications. MongoDB gère cela élégamment avec des tableaux. Dans cette étape, vous allez ajouter un tableau de tags à votre document produit.

Nous utiliserons à nouveau la méthode updateOne() avec l'opérateur $set pour ajouter un nouveau champ appelé tags. Ce champ contiendra un tableau de chaînes de caractères.

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

Cette commande trouve le produit avec sku: "SW-HD-001" et y ajoute un tableau tags. La sortie confirmera à nouveau qu'un document a été modifié.

Pour voir le résultat, interrogez à nouveau le document.

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

Le document mis à jour inclut maintenant le tableau tags. Le stockage de ces valeurs dans un tableau permet de rechercher facilement les produits qui possèdent un tag spécifique.

[
  {
    _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' ]
  }
]

Les tableaux sont une fonctionnalité puissante pour modéliser des relations un-à-plusieurs et stocker des listes de données connexes directement dans un document.

Ajouter et interroger plusieurs produits

Un catalogue de produits contiendra de nombreux articles. Dans cette étape, vous apprendrez comment ajouter plusieurs produits à la fois, puis effectuer une requête de base pour les filtrer.

Pour ajouter plusieurs documents à une collection simultanément, vous pouvez utiliser la méthode insertMany(). Cette méthode prend un tableau de documents comme argument. Ajoutons deux nouveaux produits à notre collection 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"]
  }
]);

La sortie confirmera l'opération et listera les valeurs _id des deux documents nouvellement insérés.

Maintenant que nous avons plusieurs produits, effectuons une requête pour trouver uniquement les produits appartenant à la catégorie "Electronics". Vous pouvez le faire en passant un objet filtre à la méthode find().

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

Cette commande recherche dans la collection products et retourne uniquement les documents où le champ category a la valeur "Electronics".

La sortie affichera les deux produits électroniques de notre catalogue : les "Wireless Headphones" et la "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' ]
  }
]

Vous avez maintenant pratiqué les opérations de base pour gérer un catalogue de produits. Vous pouvez quitter le shell MongoDB.

exit;

Résumé

Dans ce laboratoire, vous avez appris les principes fondamentaux de la structuration des données produit dans MongoDB. Vous avez commencé par créer une base de données et insérer un document produit de base. Vous avez ensuite amélioré ce document en intégrant des données connexes, telles que les informations de prix et de stock, dans des objets imbriqués. Vous avez également appris à utiliser des tableaux pour gérer les attributs ayant plusieurs valeurs, comme les tags produit. Enfin, vous vous êtes exercé à ajouter plusieurs documents à une collection et à effectuer une requête de base pour filtrer les données en fonction d'un champ spécifique. Ces compétences fournissent une base solide pour la création de modèles de données flexibles et efficaces pour les applications e-commerce et d'autres systèmes utilisant MongoDB.