Créer des profils utilisateur MongoDB

MongoDBBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à créer et à gérer des profils utilisateur dans MongoDB. Vous commencerez par concevoir un schéma de base, puis vous apprendrez à mettre à jour des documents, à travailler avec des tableaux pour les centres d'intérêt des utilisateurs et à gérer des paramètres imbriqués complexes. À la fin de ce laboratoire, vous aurez une solide compréhension des concepts fondamentaux de modélisation de données MongoDB pour construire des profils utilisateur flexibles et évolutifs dans vos applications.

Créer un profil utilisateur de base

Dans cette première étape, vous allez créer une nouvelle base de données et insérer votre premier document de profil utilisateur. Cela établira la structure de base pour stocker les informations de l'utilisateur.

Tout d'abord, ouvrez le shell interactif MongoDB depuis votre terminal. C'est l'outil principal pour interagir avec votre base de données MongoDB.

mongosh

Une fois dans le shell, vous verrez une invite test>. Passons à une nouvelle base de données nommée userprofiles_db. Si la base de données n'existe pas, MongoDB la créera pour vous lorsque vous stockerez des données pour la première fois.

use userprofiles_db

Maintenant, vous allez insérer un document dans une collection appelée profiles. Un document dans MongoDB est une structure BSON (binaire similaire à JSON), et une collection est un groupe de documents apparentés.

Exécutez la commande suivante pour insérer un profil pour un utilisateur nommé johndoe.

db.profiles.insertOne({
  username: "johndoe",
  personal_info: {
    first_name: "John",
    last_name: "Doe",
    email: "john.doe@example.com"
  },
  metadata: {
    created_at: new Date(),
    account_status: "active"
  }
});

Cette commande utilise la méthode insertOne() pour ajouter un seul document. Le document contient un username, un objet imbriqué personal_info et un objet metadata pour suivre l'heure de création et le statut du compte.

Pour confirmer que le document a été créé avec succès, vous pouvez utiliser la méthode find() pour le récupérer.

db.profiles.find({ username: "johndoe" });

Vous devriez voir le document que vous venez d'insérer, ainsi qu'un champ _id unique ajouté automatiquement par MongoDB. La date et l'ObjectId différeront dans votre sortie.

[
  {
    _id: ObjectId('656f1a7b2e3a4c5d6e7f8b9a'),
    username: 'johndoe',
    personal_info: {
      first_name: 'John',
      last_name: 'Doe',
      email: 'john.doe@example.com'
    },
    metadata: {
      created_at: ISODate('2023-12-05T10:30:51.123Z'),
      account_status: 'active'
    }
  }
]

Ajouter et mettre à jour les informations du profil

Dans cette étape, vous apprendrez à modifier un document existant. Nous allons ajouter des informations de contact plus détaillées au profil utilisateur créé à l'étape précédente.

Nous utiliserons la méthode updateOne() pour mettre à jour le profil johndoe. Cette méthode prend deux arguments : un filtre pour trouver le document à mettre à jour, et un document de mise à jour qui spécifie les modifications.

Ajoutons un objet contact_details. Nous utiliserons l'opérateur $set, qui remplace la valeur d'un champ par la valeur spécifiée. Si le champ n'existe pas, $set ajoute un nouveau champ.

db.profiles.updateOne(
  { username: "johndoe" },
  {
    $set: {
      contact_details: {
        phone: "+1-555-1234",
        address: {
          street: "123 Main St",
          city: "San Francisco",
          country: "USA"
        }
      },
      "metadata.last_updated": new Date()
    }
  }
);

Dans cette commande, nous avons ajouté un nouvel objet contact_details. Nous avons également utilisé la notation par points ("metadata.last_updated") pour ajouter un champ last_updated à l'objet metadata existant sans l'écraser. C'est une fonctionnalité puissante pour mettre à jour des champs imbriqués.

Récupérons à nouveau le document pour voir les modifications.

db.profiles.find({ username: "johndoe" });

La sortie affichera maintenant les contact_details nouvellement ajoutés et l'horodatage last_updated dans les metadata.

[
  {
    _id: ObjectId('656f1a7b2e3a4c5d6e7f8b9a'),
    username: 'johndoe',
    personal_info: {
      first_name: 'John',
      last_name: 'Doe',
      email: 'john.doe@example.com'
    },
    metadata: {
      created_at: ISODate('2023-12-05T10:30:51.123Z'),
      account_status: 'active',
      last_updated: ISODate('2023-12-05T10:35:22.456Z')
    },
    contact_details: {
      phone: '+1-555-1234',
      address: {
        street: '123 Main St',
        city: 'San Francisco',
        country: 'USA'
      }
    }
  }
]

Travailler avec des tableaux dans les profils

Les profils utilisateur contiennent souvent des listes d'éléments, tels que des centres d'intérêt, des compétences ou des tags. MongoDB gère cela efficacement à l'aide de tableaux. Dans cette étape, vous allez ajouter et modifier un tableau d'intérêts dans notre profil utilisateur.

Tout d'abord, ajoutons un tableau interests au profil johndoe en utilisant l'opérateur $set.

db.profiles.updateOne(
  { username: "johndoe" },
  { $set: { interests: ["technology", "travel"] } }
);

Maintenant, supposons que l'utilisateur développe un nouvel intérêt. Au lieu de remplacer le tableau entier, nous pouvons y ajouter un nouvel élément en utilisant l'opérateur $push. Cet opérateur ajoute une valeur spécifiée à un tableau et est plus efficace pour les ajouts.

db.profiles.updateOne(
  { username: "johndoe" },
  { $push: { interests: "photography" } }
);

Visualisons le profil mis à jour pour voir le nouvel intérêt. Nous pouvons utiliser la projection dans la méthode find pour afficher uniquement les champs username et interests. Définir un champ sur 1 l'inclut, et définir _id sur 0 l'exclut, ce qui maintient la sortie propre.

db.profiles.find(
  { username: "johndoe" },
  { username: 1, interests: 1, _id: 0 }
);

La sortie affichera le tableau interests avec le nouvel élément ajouté.

[
  {
    "username": "johndoe",
    "interests": ["technology", "travel", "photography"]
  }
]

Vous pouvez également interroger les utilisateurs en fonction des éléments de leurs tableaux. Par exemple, pour trouver tous les utilisateurs intéressés par la "technology" :

db.profiles.find({ interests: "technology" });

Gérer des données imbriquées complexes

Les applications réelles nécessitent souvent le stockage de configurations complexes, telles que les paramètres utilisateur. Le support de MongoDB pour les documents imbriqués est idéal pour cela. Dans cette étape, vous allez ajouter et mettre à jour un objet settings détaillé dans le profil.

Tout d'abord, ajoutons un objet settings avec des champs imbriqués pour theme, language et notifications.

db.profiles.updateOne(
  { username: "johndoe" },
  {
    $set: {
      settings: {
        theme: "dark",
        language: "en",
        notifications: {
          email: true,
          sms: false
        }
      }
    }
  }
);

Maintenant, mettons à jour un seul champ imbriqué sans réécrire l'intégralité de l'objet settings. Nous pouvons le faire à nouveau en utilisant la notation par points. Activons les notifications par SMS pour l'utilisateur.

db.profiles.updateOne(
  { username: "johndoe" },
  { $set: { "settings.notifications.sms": true } }
);

Cette commande cible précisément le champ sms dans l'objet imbriqué notifications et modifie sa valeur à true, laissant le reste de l'objet settings inchangé.

Pour vérifier la modification, récupérons uniquement l'objet settings de notre utilisateur à l'aide de la projection.

db.profiles.find({ username: "johndoe" }, { settings: 1, _id: 0 });

La sortie affichera l'objet settings mis à jour avec sms maintenant défini sur true.

[
  {
    "settings": {
      "theme": "dark",
      "language": "en",
      "notifications": { "email": true, "sms": true }
    }
  }
]

Vous avez maintenant terminé les étapes pratiques de ce laboratoire. Pour quitter le shell MongoDB, vous pouvez taper exit ou appuyer sur Ctrl+D.

exit;

Résumé

Dans ce laboratoire, vous avez appris les bases de la création de profils utilisateur dans MongoDB. Vous avez commencé par créer un document utilisateur de base, puis vous l'avez mis à jour avec de nouvelles informations à l'aide de l'opérateur $set. Vous avez également appris à gérer des listes de données à l'aide de tableaux et de l'opérateur $push, ainsi qu'à structurer et modifier des configurations complexes avec des documents imbriqués en utilisant la notation par points. Ces compétences sont essentielles pour concevoir des schémas flexibles et évolutifs pour toute application gérant des données utilisateur dans MongoDB.