Crear Perfiles de Usuario en MongoDB

MongoDBBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a crear y administrar perfiles de usuario en MongoDB. Comenzará diseñando un esquema básico, luego aprenderá a actualizar documentos, trabajar con arreglos (arrays) para los intereses del usuario y administrar configuraciones anidadas complejas. Al final de este laboratorio, tendrá una comprensión sólida de los conceptos fundamentales de modelado de datos en MongoDB para construir perfiles de usuario flexibles y escalables en sus aplicaciones.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Crear un Perfil de Usuario Básico

En este primer paso, creará una nueva base de datos e insertará su primer documento de perfil de usuario. Esto establecerá la estructura básica para almacenar la información del usuario.

Primero, abra la shell interactiva de MongoDB desde su terminal. Esta es la herramienta principal para interactuar con su base de datos MongoDB.

mongosh

Una vez dentro de la shell, verá un prompt test>. Cambiemos a una nueva base de datos llamada userprofiles_db. Si la base de datos no existe, MongoDB la creará por usted cuando almacene datos por primera vez.

use userprofiles_db

Ahora, insertará un documento en una colección llamada profiles. Un documento en MongoDB es una estructura BSON (similar a JSON binario), y una colección es un grupo de documentos relacionados.

Ejecute el siguiente comando para insertar un perfil para un usuario llamado 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"
  }
});

Este comando utiliza el método insertOne() para agregar un solo documento. El documento contiene un username, un objeto anidado personal_info y un objeto metadata para rastrear la hora de creación y el estado de la cuenta.

Para confirmar que el documento se creó correctamente, puede usar el método find() para recuperarlo.

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

Debería ver el documento que acaba de insertar, junto con un campo _id único agregado automáticamente por MongoDB. La fecha y el ObjectId diferirán en su salida.

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

Añadir y Actualizar Información del Perfil

En este paso, aprenderá a modificar un documento existente. Agregaremos información de contacto más detallada al perfil de usuario creado en el paso anterior.

Usaremos el método updateOne() para actualizar el perfil de johndoe. Este método toma dos argumentos: un filtro para encontrar el documento a actualizar y un documento de actualización que especifica los cambios.

Agregaremos un objeto contact_details. Usaremos el operador $set, que reemplaza el valor de un campo con el valor especificado. Si el campo no existe, $set agrega un nuevo campo.

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()
    }
  }
);

En este comando, agregamos un nuevo objeto contact_details. También usamos la notación de punto ("metadata.last_updated") para agregar un campo last_updated al objeto metadata existente sin sobrescribirlo. Esta es una característica potente para actualizar campos anidados.

Recuperemos el documento nuevamente para ver los cambios.

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

La salida ahora mostrará los contact_details recién agregados y la marca de tiempo last_updated en 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'
      }
    }
  }
]

Trabajar con Arrays en Perfiles

Los perfiles de usuario a menudo contienen listas de elementos, como intereses, habilidades o etiquetas. MongoDB maneja esto de manera eficiente utilizando arrays. En este paso, agregará y modificará un array de intereses en nuestro perfil de usuario.

Primero, agreguemos un array interests al perfil de johndoe usando el operador $set.

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

Ahora, supongamos que el usuario desarrolla un nuevo interés. En lugar de reemplazar todo el array, podemos agregarle un nuevo elemento usando el operador $push. Este operador agrega un valor especificado a un array y es más eficiente para adiciones.

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

Veamos el perfil actualizado para ver el nuevo interés. Podemos usar la proyección en el método find para mostrar solo los campos username e interests. Establecer un campo en 1 lo incluye, y establecer _id en 0 lo excluye, lo que mantiene la salida limpia.

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

La salida mostrará el array interests con el elemento recién agregado.

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

También puede buscar usuarios basándose en los elementos de sus arrays. Por ejemplo, para encontrar todos los usuarios interesados en "technology":

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

Gestionar Datos Anidados Complejos

Las aplicaciones del mundo real a menudo requieren el almacenamiento de configuraciones complejas, como la configuración del usuario. El soporte de MongoDB para documentos anidados es ideal para esto. En este paso, agregará y actualizará un objeto settings detallado en el perfil.

Primero, agreguemos un objeto settings con campos anidados para theme, language y notifications.

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

Ahora, actualicemos un único campo anidado sin reescribir todo el objeto settings. Podemos hacer esto nuevamente usando la notación de punto. Habilitaremos las notificaciones por SMS para el usuario.

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

Este comando apunta precisamente al campo sms dentro del objeto anidado notifications y cambia su valor a true, dejando el resto del objeto settings intacto.

Para verificar el cambio, recuperemos solo el objeto settings de nuestro usuario usando proyección.

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

La salida mostrará el objeto settings actualizado con sms ahora establecido en true.

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

Ahora ha completado los pasos prácticos de este laboratorio. Para salir del shell de MongoDB, puede escribir exit o presionar Ctrl+D.

exit;

Resumen

En este laboratorio, ha aprendido los fundamentos de la creación de perfiles de usuario en MongoDB. Comenzó creando un documento de usuario básico y luego progresó a actualizarlo con nueva información utilizando el operador $set. También aprendió a gestionar listas de datos utilizando arrays y el operador $push, y a estructurar y modificar configuraciones complejas con documentos anidados utilizando la notación de punto. Estas habilidades son esenciales para diseñar esquemas flexibles y escalables para cualquier aplicación que gestione datos de usuario en MongoDB.