Construir Perfis de Usuário no MongoDB

MongoDBBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como criar e gerenciar perfis de usuário no MongoDB. Você começará projetando um esquema básico, depois aprenderá como atualizar documentos, trabalhar com arrays para interesses de usuários e gerenciar configurações complexas aninhadas. Ao final deste laboratório, você terá uma compreensão sólida dos conceitos fundamentais de modelagem de dados do MongoDB para construir perfis de usuário flexíveis e escaláveis em suas aplicações.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 100%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Criar um Perfil de Usuário Básico

Nesta primeira etapa, você criará um novo banco de dados e inserirá seu primeiro documento de perfil de usuário. Isso estabelecerá a estrutura básica para armazenar informações do usuário.

Primeiro, abra o shell interativo do MongoDB a partir do seu terminal. Esta é a ferramenta principal para interagir com seu banco de dados MongoDB.

mongosh

Uma vez dentro do shell, você verá um prompt test>. Vamos mudar para um novo banco de dados chamado userprofiles_db. Se o banco de dados não existir, o MongoDB o criará para você quando você armazenar dados pela primeira vez.

use userprofiles_db

Agora, você inserirá um documento em uma coleção chamada profiles. Um documento no MongoDB é uma estrutura BSON (semelhante a JSON binário), e uma coleção é um grupo de documentos relacionados.

Execute o seguinte comando para inserir um perfil para um usuário chamado 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 usa o método insertOne() para adicionar um único documento. O documento contém um username, um objeto aninhado personal_info e um objeto metadata para rastrear o tempo de criação e o status da conta.

Para confirmar que o documento foi criado com sucesso, você pode usar o método find() para recuperá-lo.

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

Você deverá ver o documento que acabou de inserir, juntamente com um campo _id exclusivo adicionado automaticamente pelo MongoDB. A data e o ObjectId serão diferentes na sua saída.

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

Adicionar e Atualizar Informações do Perfil

Nesta etapa, você aprenderá como modificar um documento existente. Adicionaremos informações de contato mais detalhadas ao perfil de usuário criado na etapa anterior.

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

Vamos adicionar um objeto contact_details. Usaremos o operador $set, que substitui o valor de um campo pelo valor especificado. Se o campo não existir, $set adiciona um novo 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()
    }
  }
);

Neste comando, adicionamos um novo objeto contact_details. Também usamos a notação de ponto ("metadata.last_updated") para adicionar um campo last_updated ao objeto metadata existente sem substituí-lo. Este é um recurso poderoso para atualizar campos aninhados.

Vamos recuperar o documento novamente para ver as alterações.

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

A saída agora mostrará os contact_details recém-adicionados e o timestamp last_updated em 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'
      }
    }
  }
]

Trabalhar com Arrays em Perfis

Perfis de usuário frequentemente contêm listas de itens, como interesses, habilidades ou tags. O MongoDB lida com isso de forma eficiente usando arrays. Nesta etapa, você adicionará e modificará um array de interesses em nosso perfil de usuário.

Primeiro, vamos adicionar um array interests ao perfil johndoe usando o operador $set.

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

Agora, suponha que o usuário desenvolva um novo interesse. Em vez de substituir o array inteiro, podemos adicionar um novo elemento a ele usando o operador $push. Este operador anexa um valor especificado a um array e é mais eficiente para adições.

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

Vamos visualizar o perfil atualizado para ver o novo interesse. Podemos usar projeção no método find para mostrar apenas os campos username e interests. Definir um campo como 1 o inclui, e definir _id como 0 o exclui, o que mantém a saída limpa.

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

A saída mostrará o array interests com o elemento recém-adicionado.

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

Você também pode consultar usuários com base nos elementos em seus arrays. Por exemplo, para encontrar todos os usuários interessados em "technology":

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

Gerenciar Dados Aninhados Complexos

Aplicações do mundo real frequentemente exigem o armazenamento de configurações complexas, como as preferências do usuário. O suporte do MongoDB para documentos aninhados é ideal para isso. Nesta etapa, você adicionará e atualizará um objeto settings detalhado no perfil.

Primeiro, vamos adicionar um objeto settings com campos aninhados para theme, language e notifications.

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

Agora, vamos atualizar um único campo aninhado sem reescrever todo o objeto settings. Podemos fazer isso novamente usando a notação de ponto. Vamos habilitar as notificações por SMS para o usuário.

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

Este comando visa precisamente o campo sms dentro do objeto aninhado notifications e altera seu valor para true, deixando o restante do objeto settings inalterado.

Para verificar a alteração, vamos recuperar apenas o objeto settings do nosso usuário usando projeção.

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

A saída mostrará o objeto settings atualizado com sms agora definido como true.

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

Você completou agora as etapas práticas deste laboratório. Para sair do shell do MongoDB, você pode digitar exit ou pressionar Ctrl+D.

exit;

Resumo

Neste laboratório, você aprendeu os fundamentos da construção de perfis de usuário no MongoDB. Você começou criando um documento de usuário básico e, em seguida, progrediu para atualizá-lo com novas informações usando o operador $set. Você também aprendeu a gerenciar listas de dados usando arrays e o operador $push, e como estruturar e modificar configurações complexas com documentos aninhados usando a notação de ponto. Essas habilidades são essenciais para projetar esquemas flexíveis e escaláveis para qualquer aplicação que gerencie dados de usuários no MongoDB.