Perguntas e Respostas para Entrevistas de MongoDB

MongoDBBeginner
Pratique Agora

Introdução

Bem-vindo a este guia abrangente sobre perguntas e respostas de entrevistas do MongoDB! Quer você seja um profissional experiente procurando atualizar seus conhecimentos ou um novato se preparando para sua primeira função no MongoDB, este documento foi projetado para equipá-lo com os insights necessários para se destacar. Curamos meticulosamente uma ampla gama de tópicos, desde conceitos fundamentais e recursos avançados até administração, otimização de desempenho e solução de problemas. Mergulhe para explorar desafios baseados em cenários, tarefas práticas e conteúdo especializado adaptado para várias funções, garantindo que você esteja bem preparado para qualquer entrevista relacionada ao MongoDB. Boa sorte em sua jornada para dominar o MongoDB!

MONGODB

Fundamentos e Conceitos Essenciais do MongoDB

O que é o MongoDB e que tipo de banco de dados ele é?

Resposta:

O MongoDB é um popular programa de banco de dados NoSQL de código aberto. É um banco de dados orientado a documentos, o que significa que ele armazena dados em documentos flexíveis, semelhantes a JSON, em vez de tabelas tradicionais com linhas e colunas. Esse design sem esquema (schema-less) permite o desenvolvimento rápido e a evolução das estruturas de dados.


Explique o conceito de 'documento' no MongoDB.

Resposta:

No MongoDB, um documento é a unidade básica de dados, análoga a uma linha em um banco de dados relacional. Documentos são objetos BSON (Binary JSON), que são ricos, flexíveis e podem conter documentos e arrays aninhados. Cada documento possui um campo _id único.


O que é uma 'coleção' no MongoDB?

Resposta:

Uma coleção no MongoDB é um agrupamento de documentos. É análoga a uma tabela em um banco de dados relacional, mas, ao contrário das tabelas, as coleções não impõem um esquema. Documentos dentro de uma coleção podem ter campos e estruturas diferentes, proporcionando flexibilidade de esquema.


Como o MongoDB alcança alta disponibilidade e redundância de dados?

Resposta:

O MongoDB alcança alta disponibilidade e redundância de dados através de conjuntos de réplicas (replica sets). Um conjunto de réplicas é um grupo de instâncias do MongoDB que mantêm o mesmo conjunto de dados. Ele consiste em um nó primário que recebe todas as operações de escrita e múltiplos nós secundários que replicam dados do primário, fornecendo failover automático.


O que é sharding no MongoDB e para que ele é usado?

Resposta:

Sharding é um método para distribuir dados entre várias máquinas (shards) para suportar implantações com conjuntos de dados muito grandes e operações de alto throughput. Ele permite que o MongoDB escale horizontalmente particionando dados e distribuindo a carga, superando as limitações de um único servidor.


Explique a diferença entre _id e uma chave primária em um banco de dados relacional.

Resposta:

O campo _id no MongoDB é um identificador único para cada documento, semelhante a uma chave primária. No entanto, o _id é indexado automaticamente e pode ser de vários tipos de dados, não apenas inteiros. Ao contrário das chaves primárias tradicionais, o _id do MongoDB é frequentemente um ObjectId, um tipo BSON de 12 bytes projetado para sistemas distribuídos.


Qual é o propósito dos índices no MongoDB?

Resposta:

Índices no MongoDB são estruturas de dados especiais que armazenam uma pequena porção dos dados da coleção em um formato fácil de percorrer. Eles melhoram a eficiência das operações de leitura, permitindo que o banco de dados localize rapidamente documentos sem ter que escanear todos os documentos em uma coleção. Sem índices, o MongoDB precisa realizar um scan de coleção.


Como você insere um único documento em uma coleção do MongoDB usando o shell mongo?

Resposta:

Para inserir um único documento, você usa o método insertOne(). Por exemplo: db.mycollection.insertOne({ name: 'Alice', age: 30, city: 'New York' });. Este comando adiciona um novo documento à coleção mycollection.


Como você consulta documentos no MongoDB?

Resposta:

Documentos são consultados usando o método find(), que aceita um documento de filtro de consulta como seu primeiro argumento. Por exemplo, db.users.find({ age: { $gt: 25 } }) recupera todos os usuários com mais de 25 anos. O segundo argumento pode ser uma projeção para especificar os campos retornados.


O que é o Aggregation Framework do MongoDB?

Resposta:

O Aggregation Framework do MongoDB é uma ferramenta poderosa para processar registros de dados e retornar resultados computados. Ele usa um conceito de pipeline, onde os documentos passam por uma série de estágios (por exemplo, $match, $group, $project, $sort) para transformar e agregar dados, semelhante à cláusula GROUP BY do SQL.


Recursos Avançados e Desenvolvimento no MongoDB

Explique o propósito e os benefícios do Aggregation Framework do MongoDB.

Resposta:

O Aggregation Framework processa registros de dados e retorna resultados computados. Ele permite transformações complexas de dados, filtragem, agrupamento e análise dentro do banco de dados, reduzindo a necessidade de processamento no lado do cliente e melhorando o desempenho para consultas analíticas.


O que são transações no MongoDB e quando você as usaria?

Resposta:

O MongoDB suporta transações ACID multi-documento em conjuntos de réplicas e clusters sharded. Elas garantem a consistência e atomicidade dos dados para operações que envolvem múltiplos documentos ou coleções, o que é crucial para transações financeiras ou gerenciamento de inventário, onde todas as operações devem ter sucesso ou falhar juntas.


Descreva o conceito de Change Streams no MongoDB e um caso de uso prático.

Resposta:

Os Change Streams permitem que as aplicações acessem alterações de dados em tempo real (inserções, atualizações, exclusões) que ocorrem em uma coleção, banco de dados ou implantação. Um caso de uso prático são dashboards de análise em tempo real, sincronização de dados entre sistemas ou acionamento de ações imediatas com base em modificações de dados.


Como você lida com validação de esquema no MongoDB?

Resposta:

O MongoDB suporta validação de esquema usando JSON Schema. Você pode definir regras de validação no nível da coleção, garantindo que os documentos inseridos ou atualizados estejam em conformidade com uma estrutura e tipos de dados especificados. Isso ajuda a manter a integridade e a consistência dos dados.


O que é sharding no MongoDB e por que ele é usado?

Resposta:

Sharding é um método para distribuir dados entre várias máquinas (shards) para suportar implantações com conjuntos de dados muito grandes e operações de alto throughput. Ele permite o escalonamento horizontal, permitindo que o MongoDB lide com mais dados e tráfego do que um único servidor conseguiria.


Explique a diferença entre uma consulta coberta (covered query) e um plano de índice único (index-only plan).

Resposta:

Uma consulta coberta é aquela em que todos os campos solicitados na consulta e o predicado da consulta (cláusula WHERE) estão incluídos no índice. Isso significa que o MongoDB pode retornar resultados diretamente do índice sem acessar os documentos reais, levando a melhorias significativas de desempenho.


O que é GridFS e quais são seus casos de uso típicos?

Resposta:

GridFS é uma especificação para armazenar e recuperar arquivos grandes (como imagens, áudio, vídeo) no MongoDB. Ele divide os arquivos em pedaços (chunks) e armazena cada pedaço como um documento separado. Geralmente é usado quando você precisa armazenar arquivos junto com outros dados, ou quando seu sistema de arquivos não é adequado para dados binários grandes.


Como você pode otimizar o desempenho para operações de escrita no MongoDB?

Resposta:

Otimizar operações de escrita envolve o uso de preocupações de escrita (write concerns) apropriadas (por exemplo, w: 0 para "disparar e esquecer", w: 1 para confirmação básica), agrupar escritas usando bulkWrite(), e garantir indexação eficiente para evitar scans de coleção durante atualizações ou inserções. Além disso, considere o sharding para alto throughput de escrita.


Quando você usaria um índice de texto (text index) no MongoDB?

Resposta:

Um índice de texto é usado para suportar consultas de busca de texto em conteúdo de string dentro de seus documentos. Ele permite a busca eficiente de palavras e frases, incluindo stemming e remoção de stop words. É ideal para implementar funcionalidades de busca como descrições de produtos ou conteúdo de artigos.


Descreva o conceito de um índice TTL e sua aplicação.

Resposta:

Um índice TTL (Time-To-Live) é um tipo especial de índice de campo único que o MongoDB usa para remover automaticamente documentos de uma coleção após um certo período de tempo ou em um horário específico. É comumente usado para gerenciar dados de sessão, dados de log ou caches temporários que expiram.


Administração e Operações do MongoDB

Como você realiza um backup e restauração no MongoDB?

Resposta:

Backups são tipicamente feitos usando mongodump para criar arquivos BSON, e restaurações usando mongorestore. Para conjuntos de réplicas, é melhor fazer o dump de um secundário para evitar impactar o desempenho do primário. Para clusters sharded, mongodump deve ser executado contra uma instância mongos.


Explique o propósito do Oplog do MongoDB. Como ele se relaciona com a replicação?

Resposta:

O Oplog (operations log) é uma coleção especial capped que registra todas as operações de escrita aplicadas ao conjunto de dados do primário. Os secundários acompanham continuamente o oplog do primário e aplicam essas operações aos seus próprios conjuntos de dados, garantindo a consistência dos dados e habilitando a replicação.


Qual é a diferença entre um conjunto de réplicas (replica set) e sharding no MongoDB?

Resposta:

Um conjunto de réplicas fornece alta disponibilidade e redundância de dados mantendo múltiplas cópias dos dados. O sharding fornece escalabilidade horizontal distribuindo dados entre múltiplos servidores (shards), permitindo conjuntos de dados maiores e maior throughput.


Como você monitora o desempenho de uma instância do MongoDB?

Resposta:

Ferramentas chave incluem mongostat para estatísticas em tempo real, mongotop para atividade de leitura/escrita por coleção, e db.serverStatus() para métricas detalhadas do servidor. Soluções de monitoramento em nuvem como MongoDB Atlas Monitoring ou ferramentas de terceiros também são comumente usadas.


Descreva os passos para adicionar um novo membro a um conjunto de réplicas do MongoDB existente.

Resposta:

Primeiro, inicie a nova instância mongod com o nome correto do conjunto de réplicas. Em seguida, conecte-se ao primário e use rs.add('hostname:port') para adicionar o novo membro. O novo membro então começará a sincronizar dados de um membro existente.


Quais são as causas comuns de consultas lentas no MongoDB e como você as solucionaria?

Resposta:

Causas comuns incluem índices ausentes ou ineficientes, grandes scans de coleção e padrões de consulta ineficientes. A solução de problemas envolve o uso de db.collection.explain() para analisar planos de execução de consulta e identificar consultas que realizam scans completos de coleção ou usam índices ineficientes.


Como você lida com segurança no MongoDB? Quais são algumas melhores práticas?

Resposta:

A segurança envolve habilitar autenticação (SCRAM-SHA-256), implementar controle de acesso baseado em função (RBAC), habilitar TLS/SSL para criptografia em trânsito e garantir isolamento de rede. Auditoria e atualizações de segurança regulares também são cruciais.


Quando você consideraria fazer sharding de um cluster MongoDB?

Resposta:

O sharding é considerado quando um único conjunto de réplicas não consegue mais lidar com o volume de dados ou o throughput de leitura/escrita. Isso geralmente acontece quando o conjunto de trabalho (working set) excede a RAM, levando a um I/O excessivo de disco, ou quando o número de operações por segundo se torna muito alto para um único servidor.


Explique o conceito de 'write concern' no MongoDB.

Resposta:

Write concern descreve o nível de reconhecimento solicitado ao MongoDB para uma operação de escrita. As opções incluem w: 1 (reconhecimento do primário), w: 'majority' (reconhecimento da maioria dos membros do conjunto de réplicas), ou w: 0 (sem reconhecimento).


Qual é o propósito do journal no MongoDB?

Resposta:

O journal é um log de escrita antecipada (write-ahead log) que registra modificações de dados antes que elas sejam aplicadas aos arquivos de dados. Ele garante a durabilidade e a consistência dos dados, permitindo que o MongoDB se recupere para um estado consistente após um desligamento inesperado sem perda de dados.


Perguntas Baseadas em Cenários e Resolução de Problemas

Você tem uma coleção de 'orders' com milhões de documentos. Cada pedido tem um campo 'status' (por exemplo, 'pending', 'shipped', 'delivered') e um campo 'timestamp'. Como você encontraria eficientemente todos os pedidos 'pending' das últimas 24 horas?

Resposta:

Crie um índice composto em { status: 1, timestamp: -1 }. Em seguida, consulte usando db.orders.find({ status: 'pending', timestamp: { $gte: ISODate('...') } }). O índice permitirá a filtragem eficiente por status e varreduras de intervalo (range scans) no timestamp.


Sua aplicação precisa frequentemente recuperar perfis de usuário por 'username' e 'email'. Como você projetaria seus índices para suportar ambos os tipos de consulta eficientemente?

Resposta:

Crie dois índices de campo único separados: db.users.createIndex({ username: 1 }) e db.users.createIndex({ email: 1 }). Isso permite que o MongoDB use o índice apropriado para consultas baseadas em qualquer um dos campos.


Uma coleção chamada 'products' tem um campo 'price'. Você precisa encontrar produtos dentro de uma faixa de preço específica e ordená-los por 'name'. Como você otimizaria essa consulta?

Resposta:

Crie um índice composto em { price: 1, name: 1 }. A consulta seria db.products.find({ price: { $gte: 10, $lte: 50 } }).sort({ name: 1 }). Este índice suporta tanto a consulta de intervalo no preço quanto a operação de ordenação no nome.


Você está projetando uma aplicação de mídia social. Usuários podem ter muitos 'posts'. Você deve incorporar os posts dentro do documento do usuário ou usar uma coleção 'posts' separada com referências? Justifique sua escolha.

Resposta:

Use uma coleção 'posts' separada com referências. A incorporação levaria a documentos de usuário grandes e crescentes, excedendo o limite de 16MB do BSON e causando problemas de desempenho com atualizações frequentes. O referenciamento permite crescimento escalável e consulta eficiente de posts independentemente.


Sua aplicação experimenta consultas lentas ao agregar dados de uma coleção 'logs'. O pipeline de agregação envolve $match, $group e $sort. Que passos você tomaria para diagnosticar e melhorar o desempenho?

Resposta:

Primeiro, use explain() no pipeline de agregação para identificar gargalos. Certifique-se de que índices apropriados existam para os campos usados nas etapas $match e $sort. Considere usar uma consulta coberta (covered query), se possível, ou pré-agregar dados para relatórios acessados com frequência.


Você precisa armazenar sessões de usuário, que expiram após 30 minutos de inatividade. Como você implementaria isso eficientemente no MongoDB?

Resposta:

Use um índice TTL (Time-To-Live) em um campo de timestamp (por exemplo, lastActivity) em sua coleção 'sessions'. Crie o índice com db.sessions.createIndex({ lastActivity: 1 }, { expireAfterSeconds: 1800 }). O MongoDB excluirá automaticamente documentos com mais de 30 minutos.


Sua aplicação precisa realizar atualizações atômicas em um documento, incrementando um contador e adicionando um item a um array. Como você garantiria a consistência dos dados?

Resposta:

Use uma única operação db.collection.updateOne() com os operadores $inc e $push. O MongoDB garante atomicidade para escritas em um único documento. Por exemplo: db.products.updateOne({ _id: productId }, { $inc: { stock: -1 }, $push: { buyers: userId } }).


Uma coleção 'events' tem um campo 'location', que é um array de coordenadas [longitude, latitude]. Como você encontraria todos os eventos dentro de um raio de 5km de um determinado ponto?

Resposta:

Crie um índice 2dsphere no campo 'location': db.events.createIndex({ location: '2dsphere' }). Em seguida, use o operador $geoWithin com $centerSphere para a consulta: db.events.find({ location: { $geoWithin: { $centerSphere: [[lon, lat], radiusInRadians] } } }).


Você está migrando dados de um banco de dados relacional para o MongoDB. Você tem uma tabela 'customers' e uma tabela 'addresses' com um relacionamento de um para muitos. Como você modelaria isso no MongoDB?

Resposta:

Se os endereços são acessados com frequência com os clientes e não são muito numerosos, incorpore-os como um array dentro do documento do cliente. Se os endereços são grandes, numerosos ou compartilhados, use uma coleção 'addresses' separada e referencie-os pelo _id no documento do cliente.


Seu conjunto de réplicas do MongoDB tem um primário e dois secundários. O primário falha. O que acontece e como o MongoDB garante alta disponibilidade?

Resposta:

Quando o primário falha, os membros restantes realizam uma eleição. Um dos secundários será eleito como o novo primário. Este processo garante alta disponibilidade e failover automático, geralmente concluindo em segundos.


Você precisa realizar uma consulta analítica complexa que envolve a junção de dados de duas coleções diferentes e a realização de múltiplas agregações. Qual recurso do MongoDB você usaria?

Resposta:

O Aggregation Pipeline com o estágio $lookup. O $lookup realiza uma junção externa à esquerda (left outer join) para uma coleção não sharded no mesmo banco de dados, permitindo combinar dados de múltiplas coleções antes de realizar outros estágios de agregação como $group, $match e $sort.


Otimização de Desempenho e Melhores Práticas

Solução de Problemas e Depuração do MongoDB

Quais são os primeiros passos que você toma quando uma aplicação MongoDB está com desempenho lento?

Resposta:

Primeiro, verificaria os logs do MongoDB em busca de erros ou consultas lentas. Em seguida, usaria mongostat e mongotop para monitorar métricas de desempenho em tempo real e identificar operações ativas ou coleções que consomem recursos. Finalmente, analisaria db.currentOp() para ver as operações em andamento.


Como você identifica consultas de execução lenta no MongoDB?

Resposta:

Eu uso o comando db.setProfilingLevel(1, { slowms: 100 }) para habilitar a profilagem do banco de dados, que registra consultas que excedem um limite especificado. Alternativamente, posso usar db.system.profile.find() para consultar diretamente a coleção do profiler em busca de operações lentas. O plano explain() também é crucial para entender a execução da consulta.


Uma consulta está consistentemente lenta. Que ferramentas e técnicas você usaria para otimizá-la?

Resposta:

Eu usaria explain('executionStats') para analisar o plano de consulta, identificar índices ausentes ou estágios ineficientes. Com base na saída do explain, eu criaria índices apropriados. Se a indexação não for suficiente, eu consideraria redesenho do esquema ou reestruturação da consulta.


Como você soluciona a alta utilização de CPU em um servidor MongoDB?

Resposta:

Alta CPU geralmente indica consultas ineficientes, índices ausentes ou operações de escrita excessivas. Eu verificaria mongostat para operações ativas, db.currentOp() para processos de longa duração e o profiler para consultas lentas. Ferramentas de nível de sistema operacional como top ou htop também podem identificar o uso de CPU do processo mongod.


Quais são as causas comuns de alto uso de memória no MongoDB e como você as aborda?

Resposta:

Alto uso de memória pode ser devido a grandes conjuntos de trabalho (working sets), consultas ineficientes que puxam muitos dados para a RAM, ou pipelines de agregação não otimizados. Eu verificaria db.serverStatus().wiredTiger.cache para utilização do cache e garantiria a indexação adequada para reduzir os dados escaneados. Pode ser necessário escalar a RAM ou implementar sharding.


Descreva como você depuraria um conjunto de réplicas que não está sincronizando corretamente.

Resposta:

Eu começaria verificando rs.status() em todos os membros para identificar o estado e a saúde de cada nó. Em seguida, examinaria os logs do MongoDB em cada membro em busca de erros relacionados à replicação, problemas de rede ou falhas na aplicação do oplog. A conectividade de rede entre os membros também é um culpado comum.


Qual é o propósito do profiler do MongoDB e como você o habilita?

Resposta:

O profiler do MongoDB captura informações detalhadas sobre operações de banco de dados, incluindo tempos de execução de consultas, locks e I/O. Ele ajuda a identificar consultas e operações lentas. Você o habilita usando db.setProfilingLevel(level, { slowms: threshold }), onde level pode ser 0 (desligado), 1 (operações lentas) ou 2 (todas as operações).


Como você lida com uma situação em que uma instância do MongoDB fica sem espaço em disco?

Resposta:

Primeiro, eu identificaria o que está consumindo espaço usando db.stats() e db.collection.stats(). Em seguida, procuraria por arquivos de log grandes ou backups antigos para excluir. Se o crescimento dos dados for o problema, eu consideraria adicionar mais espaço em disco, implementar sharding ou arquivar dados antigos para reduzir o conjunto de trabalho.


Você suspeita de uma operação com deadlock. Como você investigaria isso no MongoDB?

Resposta:

O MongoDB usa controle de concorrência otimista, então deadlocks verdadeiros são raros. No entanto, operações de longa duração que detêm locks podem bloquear outras. Eu usaria db.currentOp() para identificar operações com o status waitingForLock e ver qual operação está detendo o lock. Eu poderia então terminar a operação bloqueadora, se necessário.


Quais são as métricas-chave que você monitora para a saúde e desempenho do MongoDB?

Resposta:

As métricas-chave incluem opcounters (leituras, escritas, comandos), connections (atuais, disponíveis), network (bytes de entrada/saída), memory (residente, virtual, mapeada), wiredTiger.cache (bytes sujos, páginas lidas/escritas) e locks (global, banco de dados, coleção). Estes fornecem insights sobre a carga de trabalho e a utilização de recursos.


MongoDB para Funções Específicas (Desenvolvedor, DBA, DevOps)

Desenvolvedor: Como você lida com o design de esquema no MongoDB, dada sua natureza sem esquema (schemaless)?

Resposta:

Embora o MongoDB seja sem esquema, é crucial projetar um esquema implícito. Isso envolve incorporar dados relacionados para consultas comuns para minimizar joins e usar referências para conjuntos de dados acessados com menos frequência ou de grande porte. O objetivo é otimizar o desempenho de leitura e a localidade dos dados.


Desenvolvedor: Explique a diferença entre find() e aggregate() em consultas MongoDB.

Resposta:

find() é usado para consultas básicas para recuperar documentos que correspondem a critérios especificados, muitas vezes com projeção e ordenação. aggregate() é um framework mais poderoso para processamento de dados, permitindo pipelines de múltiplos estágios para realizar operações como agrupamento, junção e transformação de documentos.


DBA: O que é um conjunto de réplicas (replica set) e por que ele é importante para implantações de produção do MongoDB?

Resposta:

Um conjunto de réplicas é um grupo de processos MongoDB que mantêm o mesmo conjunto de dados, fornecendo alta disponibilidade e redundância de dados. Ele garante failover automático se o nó primário falhar, prevenindo tempo de inatividade e perda de dados, e também pode ser usado para escalonamento de leitura.


DBA: Como você monitora o desempenho de uma instância MongoDB?

Resposta:

O monitoramento de desempenho envolve a verificação de métricas como db.serverStatus() para operações, conexões e uso de memória. Ferramentas como MongoDB Atlas Monitoring, Ops Manager ou soluções de terceiros são usadas para rastrear indicadores-chave de desempenho (KPIs) como latência de consulta, uso de índice e atraso de replicação (replication lag).


DevOps: Descreva o processo de implantação de um cluster sharded no MongoDB.

Resposta:

A implantação de um cluster sharded envolve a configuração de servidores de configuração (config servers - para armazenar metadados), roteadores mongos (para rotear consultas) e conjuntos de réplicas de shard (shard replica sets - para armazenar dados). O processo inclui inicializar conjuntos de réplicas, adicionar shards ao cluster e habilitar o sharding em bancos de dados e coleções.


DevOps: Como você realiza backups e restaurações no MongoDB?

Resposta:

Backups podem ser feitos usando mongodump para backups lógicos ou snapshots do sistema de arquivos para backups físicos. Para restaurações, mongorestore é usado para backups lógicos. Para clusters sharded, backups consistentes exigem uma abordagem coordenada, muitas vezes usando um agente de backup dedicado ou serviços de provedores de nuvem.


Desenvolvedor: Quando você usaria um documento embutido (embedded document) versus um documento referenciado (referenced document)?

Resposta:

Incorpore documentos quando os dados são acessados frequentemente juntos, têm uma relação um-para-poucos (one-to-few) e não crescem ilimitadamente. Referencie documentos quando os dados são grandes, têm uma relação um-para-muitos ou muitos-para-muitos, ou precisam ser acessados independentemente, para evitar limites de tamanho de documento e melhorar a eficiência de atualização.


DBA: O que são índices (indexes) no MongoDB e por que eles são cruciais para o desempenho de consultas?

Resposta:

Índices são estruturas de dados especiais que armazenam uma pequena porção dos dados da coleção em um formato fácil de percorrer. Eles melhoram significativamente o desempenho de consultas, permitindo que o MongoDB localize rapidamente documentos sem escanear toda a coleção, semelhante aos índices em bancos de dados relacionais.


DevOps: Como você lida com atualizações contínuas (rolling upgrades) para um conjunto de réplicas do MongoDB?

Resposta:

Atualizações contínuas envolvem a atualização dos membros secundários um por um, começando pelo secundário de menor prioridade, depois o próximo, e finalmente promovendo o primário para atualizá-lo. Isso minimiza o tempo de inatividade garantindo que um primário esteja sempre disponível durante o processo de atualização.


Desenvolvedor: Explique o conceito de Write Concerns no MongoDB.

Resposta:

Write concerns descrevem o nível de reconhecimento solicitado ao MongoDB para operações de escrita. Opções como w: 1 (apenas primário) ou w: 'majority' (maioria dos membros do conjunto de réplicas) controlam a durabilidade e a consistência, impactando o desempenho e a segurança dos dados.


Tarefas Práticas e Manuais do MongoDB

Como você se conecta a um banco de dados MongoDB a partir do MongoDB Shell e lista todos os bancos de dados disponíveis?

Resposta:

Para se conectar, use mongo ou mongosh. Para listar bancos de dados, use show dbs ou show databases. Para mudar para um banco de dados específico, use use <nome_do_banco_de_dados>.


Escreva uma consulta MongoDB para inserir um único documento em uma coleção chamada 'products' com os campos 'name', 'price' e 'category'.

Resposta:

db.products.insertOne({ name: 'Laptop', price: 1200, category: 'Electronics' });


Como você encontraria todos os documentos na coleção 'orders' onde o 'status' é 'pending' e o 'totalAmount' é maior que 100?

Resposta:

db.orders.find({ status: 'pending', totalAmount: { $gt: 100 } });


Explique como atualizar um único documento na coleção 'users', definindo a 'age' para 30 para o usuário com 'username' 'john_doe'.

Resposta:

db.users.updateOne({ username: 'john_doe' }, { $set: { age: 30 } }); Isso atualiza o primeiro documento que corresponde ao filtro.


Você precisa excluir todos os documentos da coleção 'logs' que são mais antigos que uma data específica (por exemplo, '2023-01-01'). Como você faria isso?

Resposta:

db.logs.deleteMany({ timestamp: { $lt: ISODate('2023-01-01T00:00:00Z') } }); Isso remove todos os documentos onde o timestamp é menor que a data especificada.


Descreva como criar um índice no campo 'email' na coleção 'users' para garantir a exclusividade.

Resposta:

db.users.createIndex({ email: 1 }, { unique: true }); Isso cria um índice único ascendente no campo 'email', impedindo endereços de e-mail duplicados.


Como você realiza uma agregação básica para contar o número de documentos na coleção 'orders' agrupados por 'status'?

Resposta:

db.orders.aggregate([ { group: { _id: 'status', count: { $sum: 1 } } } ]); Isso agrupa os documentos por seu 'status' e os conta.


Você tem uma coleção 'articles' com um array 'tags'. Como você encontraria todos os artigos que têm tanto 'MongoDB' quanto 'NoSQL' como tags?

Resposta:

db.articles.find({ tags: { $all: ['MongoDB', 'NoSQL'] } }); Esta consulta garante que ambas as tags especificadas estejam presentes no array 'tags'.


Explique o propósito do método explain() no MongoDB e forneça um exemplo de seu uso.

Resposta:

O método explain() fornece informações sobre o plano de execução de uma consulta, ajudando a otimizar o desempenho. Exemplo: db.products.find({ price: { $gt: 500 } }).explain('executionStats');


Como você faria backup de um banco de dados MongoDB específico chamado 'mydatabase' usando ferramentas de linha de comando?

Resposta:

Use mongodump --db mydatabase --out /path/to/backup/directory. Este comando cria um dump BSON do banco de dados especificado no diretório de saída.


Resumo

Dominar o MongoDB para entrevistas é uma jornada que se beneficia significativamente de uma preparação completa. Ao se familiarizar com perguntas comuns, entender conceitos centrais e praticar suas explicações, você não apenas aumenta sua confiança, mas também demonstra um forte domínio da tecnologia. Essa preparação é fundamental para articular suas habilidades de forma eficaz e causar uma impressão duradoura.

Lembre-se que o cenário da tecnologia está em constante evolução. Continue explorando novos recursos, melhores práticas e discussões da comunidade para aprofundar sua expertise. Sua dedicação ao aprendizado contínuo não só o servirá bem em entrevistas, mas também o capacitará a se destacar em sua carreira como um profissional de MongoDB. Continue aprendendo, continue construindo e continue crescendo!