Preguntas y Respuestas de Entrevista de MongoDB

MongoDBBeginner
Practicar Ahora

Introducción

¡Bienvenido a esta guía completa sobre preguntas y respuestas de entrevistas de MongoDB! Ya seas un profesional experimentado que busca refrescar sus conocimientos o un recién llegado que se prepara para su primer puesto en MongoDB, este documento está diseñado para proporcionarte la información necesaria para destacar. Hemos seleccionado meticulosamente una amplia gama de temas, desde conceptos fundamentales y características avanzadas hasta administración, optimización del rendimiento y resolución de problemas. Sumérgete para explorar desafíos basados en escenarios, tareas prácticas y contenido especializado adaptado a varios roles, asegurando que estés bien preparado para cualquier entrevista relacionada con MongoDB. ¡Buena suerte en tu camino para dominar MongoDB!

MONGODB

Fundamentos y Conceptos Clave de MongoDB

¿Qué es MongoDB y qué tipo de base de datos es?

Respuesta:

MongoDB es un popular programa de base de datos NoSQL de código abierto. Es una base de datos orientada a documentos, lo que significa que almacena datos en documentos flexibles, similares a JSON, en lugar de tablas tradicionales con filas y columnas. Este diseño sin esquema permite un rápido desarrollo y evolución de las estructuras de datos.


Explica el concepto de 'documento' en MongoDB.

Respuesta:

En MongoDB, un documento es la unidad básica de datos, análoga a una fila en una base de datos relacional. Los documentos son objetos BSON (Binary JSON), que son ricos, flexibles y pueden contener documentos y arreglos anidados. Cada documento tiene un campo _id único.


¿Qué es una 'colección' en MongoDB?

Respuesta:

Una colección en MongoDB es un grupo de documentos. Es análoga a una tabla en una base de datos relacional, pero a diferencia de las tablas, las colecciones no imponen un esquema. Los documentos dentro de una colección pueden tener diferentes campos y estructuras, proporcionando flexibilidad de esquema.


¿Cómo logra MongoDB alta disponibilidad y redundancia de datos?

Respuesta:

MongoDB logra alta disponibilidad y redundancia de datos a través de conjuntos de réplicas (replica sets). Un conjunto de réplicas es un grupo de instancias de MongoDB que mantienen el mismo conjunto de datos. Consiste en un nodo primario que recibe todas las operaciones de escritura y múltiples nodos secundarios que replican datos del primario, proporcionando conmutación por error automática (failover).


¿Qué es el sharding en MongoDB y por qué se utiliza?

Respuesta:

El sharding es un método para distribuir datos a través de múltiples máquinas (shards) para soportar implementaciones con conjuntos de datos muy grandes y operaciones de alto rendimiento. Permite a MongoDB escalar horizontalmente particionando datos y distribuyendo la carga, superando las limitaciones de un solo servidor.


Explica la diferencia entre _id y una clave primaria en una base de datos relacional.

Respuesta:

El campo _id en MongoDB es un identificador único para cada documento, similar a una clave primaria. Sin embargo, _id está indexado automáticamente y puede ser de varios tipos de datos, no solo enteros. A diferencia de las claves primarias tradicionales, el _id de MongoDB suele ser un ObjectId, un tipo BSON de 12 bytes diseñado para sistemas distribuidos.


¿Cuál es el propósito de los índices en MongoDB?

Respuesta:

Los índices en MongoDB son estructuras de datos especiales que almacenan una pequeña porción de los datos de la colección en un formato fácil de recorrer. Mejoran la eficiencia de las operaciones de lectura al permitir que la base de datos localice rápidamente documentos sin tener que escanear cada documento de una colección. Sin índices, MongoDB debe realizar un escaneo de colección (collection scan).


¿Cómo se inserta un solo documento en una colección de MongoDB usando la shell mongo?

Respuesta:

Para insertar un solo documento, se utiliza el método insertOne(). Por ejemplo: db.mycollection.insertOne({ name: 'Alice', age: 30, city: 'New York' });. Este comando agrega un nuevo documento a la colección mycollection.


¿Cómo se consultan documentos en MongoDB?

Respuesta:

Los documentos se consultan utilizando el método find(), que toma un documento de filtro de consulta como su primer argumento. Por ejemplo, db.users.find({ age: { $gt: 25 } }) recupera todos los usuarios mayores de 25 años. El segundo argumento puede ser una proyección para especificar los campos devueltos.


¿Qué es el Aggregation Framework de MongoDB?

Respuesta:

El Aggregation Framework de MongoDB es una herramienta potente para procesar registros de datos y devolver resultados calculados. Utiliza un concepto de pipeline, donde los documentos pasan por una serie de etapas (por ejemplo, $match, $group, $project, $sort) para transformar y agregar datos, similar a la cláusula GROUP BY de SQL.


Características Avanzadas de MongoDB y Desarrollo

Explica el propósito y los beneficios del Aggregation Framework de MongoDB.

Respuesta:

El Aggregation Framework procesa registros de datos y devuelve resultados calculados. Permite transformaciones de datos complejas, filtrado, agrupación y análisis dentro de la base de datos, reduciendo la necesidad de procesamiento del lado del cliente y mejorando el rendimiento para consultas analíticas.


¿Qué son las transacciones en MongoDB y cuándo las usarías?

Respuesta:

MongoDB soporta transacciones ACID multi-documento en conjuntos de réplicas y clústeres sharded. Aseguran la consistencia de los datos y la atomicidad para operaciones que involucran múltiples documentos o colecciones, lo cual es crucial para transacciones financieras o gestión de inventario donde todas las operaciones deben tener éxito o fallar juntas.


Describe el concepto de Change Streams en MongoDB y un caso de uso práctico.

Respuesta:

Los Change Streams permiten a las aplicaciones acceder a cambios de datos en tiempo real (inserciones, actualizaciones, eliminaciones) que ocurren en una colección, base de datos o despliegue. Un caso de uso práctico son los paneles de análisis en tiempo real, la sincronización de datos entre sistemas o la activación de acciones inmediatas basadas en modificaciones de datos.


¿Cómo manejas la validación de esquemas en MongoDB?

Respuesta:

MongoDB soporta la validación de esquemas utilizando JSON Schema. Puedes definir reglas de validación a nivel de colección, asegurando que los documentos insertados o actualizados se ajusten a una estructura y tipos de datos especificados. Esto ayuda a mantener la integridad y consistencia de los datos.


¿Qué es el sharding en MongoDB y por qué se utiliza?

Respuesta:

El sharding es un método para distribuir datos a través de múltiples máquinas (shards) para soportar implementaciones con conjuntos de datos muy grandes y operaciones de alto rendimiento. Permite la escalabilidad horizontal, posibilitando que MongoDB maneje más datos y tráfico que un solo servidor.


Explica la diferencia entre una consulta cubierta (covered query) y un plan de solo índice (index-only plan).

Respuesta:

Una consulta cubierta es aquella en la que todos los campos solicitados en la consulta y el predicado de la consulta (cláusula WHERE) están incluidos en el índice. Esto significa que MongoDB puede devolver resultados directamente desde el índice sin acceder a los documentos reales, lo que genera mejoras significativas de rendimiento.


¿Qué es GridFS y cuáles son sus casos de uso típicos?

Respuesta:

GridFS es una especificación para almacenar y recuperar archivos grandes (como imágenes, audio, video) en MongoDB. Divide los archivos en fragmentos (chunks) y almacena cada fragmento como un documento separado. Se utiliza típicamente cuando necesitas almacenar archivos junto con otros datos, o cuando tu sistema de archivos no es adecuado para datos binarios grandes.


¿Cómo puedes optimizar el rendimiento para operaciones de escritura en MongoDB?

Respuesta:

La optimización de operaciones de escritura implica el uso de niveles de confirmación de escritura (write concerns) apropiados (por ejemplo, w: 0 para "disparar y olvidar", w: 1 para confirmación básica), agrupar escrituras usando bulkWrite(), y asegurar una indexación eficiente para evitar escaneos de colección durante actualizaciones o inserciones. Además, considera el sharding para un alto rendimiento de escritura.


¿Cuándo usarías un índice de texto (text index) en MongoDB?

Respuesta:

Un índice de texto se utiliza para soportar consultas de búsqueda de texto en el contenido de cadenas dentro de tus documentos. Permite la búsqueda eficiente de palabras y frases, incluyendo la derivación (stemming) y la eliminación de palabras vacías (stop words). Es ideal para implementar funcionalidades de búsqueda como descripciones de productos o contenido de artículos.


Describe el concepto de un índice TTL y su aplicación.

Respuesta:

Un índice TTL (Time-To-Live) es un tipo especial de índice de un solo campo que MongoDB utiliza para eliminar automáticamente documentos de una colección después de un cierto período de tiempo o en una hora específica del reloj. Se utiliza comúnmente para gestionar datos de sesión, datos de registro o cachés temporales que caducan.


Administración y Operaciones de MongoDB

¿Cómo se realiza una copia de seguridad y restauración en MongoDB?

Respuesta:

Las copias de seguridad se realizan típicamente usando mongodump para crear archivos BSON, y las restauraciones usando mongorestore. Para conjuntos de réplicas, es mejor hacer el volcado desde un secundario para evitar impactar el rendimiento del primario. Para clústeres sharded, mongodump debe ejecutarse contra una instancia de mongos.


Explica el propósito del Oplog de MongoDB. ¿Cómo se relaciona con la replicación?

Respuesta:

El Oplog (registro de operaciones) es una colección especial limitada (capped collection) que registra todas las operaciones de escritura aplicadas al conjunto de datos del primario. Los secundarios siguen continuamente el oplog del primario y aplican estas operaciones a sus propios conjuntos de datos, asegurando la consistencia de los datos y habilitando la replicación.


¿Cuál es la diferencia entre un conjunto de réplicas (replica set) y el sharding en MongoDB?

Respuesta:

Un conjunto de réplicas proporciona alta disponibilidad y redundancia de datos manteniendo múltiples copias de los datos. El sharding proporciona escalabilidad horizontal distribuyendo datos a través de múltiples servidores (shards), permitiendo conjuntos de datos más grandes y un mayor rendimiento.


¿Cómo se monitoriza el rendimiento de una instancia de MongoDB?

Respuesta:

Las herramientas clave incluyen mongostat para estadísticas en tiempo real, mongotop para actividad de lectura/escritura por colección, y db.serverStatus() para métricas detalladas del servidor. También se utilizan comúnmente soluciones de monitorización en la nube como MongoDB Atlas Monitoring o herramientas de terceros.


Describe los pasos para añadir un nuevo miembro a un conjunto de réplicas de MongoDB existente.

Respuesta:

Primero, inicia la nueva instancia mongod con el nombre correcto del conjunto de réplicas. Luego, conéctate al primario y usa rs.add('hostname:port') para añadir el nuevo miembro. El nuevo miembro comenzará a sincronizar datos de un miembro existente.


¿Cuáles son las causas comunes de consultas lentas en MongoDB y cómo las solucionarías?

Respuesta:

Las causas comunes incluyen índices faltantes o ineficientes, escaneos de colecciones grandes y patrones de consulta ineficientes. La solución de problemas implica usar db.collection.explain() para analizar los planes de ejecución de consultas e identificar consultas que realizan escaneos completos de colección o utilizan índices ineficientes.


¿Cómo manejas la seguridad en MongoDB? ¿Cuáles son algunas mejores prácticas?

Respuesta:

La seguridad implica habilitar la autenticación (SCRAM-SHA-256), implementar el control de acceso basado en roles (RBAC), habilitar TLS/SSL para cifrado en tránsito y asegurar el aislamiento de red. La auditoría y las actualizaciones de seguridad regulares también son cruciales.


¿Cuándo considerarías el sharding de un clúster de MongoDB?

Respuesta:

Se considera el sharding cuando un solo conjunto de réplicas ya no puede manejar el volumen de datos o el rendimiento de lectura/escritura. Esto ocurre típicamente cuando el conjunto de trabajo (working set) excede la RAM, lo que lleva a una E/S de disco excesiva, o cuando el número de operaciones por segundo se vuelve demasiado alto para un solo servidor.


Explica el concepto de 'write concern' en MongoDB.

Respuesta:

El write concern describe el nivel de acuse de recibo solicitado a MongoDB para una operación de escritura. Las opciones incluyen w: 1 (acuse de recibo del primario), w: 'majority' (acuse de recibo de la mayoría de los miembros del conjunto de réplicas), o w: 0 (sin acuse de recibo).


¿Cuál es el propósito del journal en MongoDB?

Respuesta:

El journal es un registro de escritura anticipada (write-ahead log) que registra las modificaciones de datos antes de que se apliquen a los archivos de datos. Asegura la durabilidad y consistencia de los datos, permitiendo que MongoDB se recupere a un estado consistente después de un apagado inesperado sin pérdida de datos.


Preguntas Basadas en Escenarios y Resolución de Problemas

Tienes una colección de 'orders' con millones de documentos. Cada pedido tiene un campo 'status' (por ejemplo, 'pending', 'shipped', 'delivered') y un campo 'timestamp'. ¿Cómo encontrarías eficientemente todos los pedidos 'pending' de las últimas 24 horas?

Respuesta:

Crea un índice compuesto en { status: 1, timestamp: -1 }. Luego, consulta usando db.orders.find({ status: 'pending', timestamp: { $gte: ISODate('...') } }). El índice permitirá un filtrado eficiente por estado y escaneos de rango en la marca de tiempo.


Tu aplicación necesita recuperar frecuentemente perfiles de usuario por 'username' y 'email'. ¿Cómo diseñarías tus índices para soportar ambos tipos de búsqueda de manera eficiente?

Respuesta:

Crea dos índices de campo único separados: db.users.createIndex({ username: 1 }) y db.users.createIndex({ email: 1 }). Esto permite a MongoDB utilizar el índice apropiado para consultas basadas en cualquiera de los campos.


Una colección llamada 'products' tiene un campo 'price'. Necesitas encontrar productos dentro de un rango de precios específico y ordenarlos por 'name'. ¿Cómo optimizarías esta consulta?

Respuesta:

Crea un índice compuesto en { price: 1, name: 1 }. La consulta sería db.products.find({ price: { $gte: 10, $lte: 50 } }).sort({ name: 1 }). Este índice soporta tanto la consulta de rango en el precio como la operación de ordenación en el nombre.


Estás diseñando una aplicación de redes sociales. Los usuarios pueden tener muchos 'posts'. ¿Deberías incrustar los posts dentro del documento del usuario o usar una colección 'posts' separada con referencias? Justifica tu elección.

Respuesta:

Usa una colección 'posts' separada con referencias. Incrustar llevaría a documentos de usuario grandes y en crecimiento, excediendo el límite de 16MB de BSON y causando problemas de rendimiento con actualizaciones frecuentes. Usar referencias permite un crecimiento escalable y una consulta eficiente de los posts de forma independiente.


Tu aplicación experimenta consultas lentas al agregar datos de una colección 'logs'. El pipeline de agregación involucra $match, $group y $sort. ¿Qué pasos tomarías para diagnosticar y mejorar el rendimiento?

Respuesta:

Primero, usa explain() en el pipeline de agregación para identificar cuellos de botella. Asegúrate de que existan índices apropiados para los campos utilizados en las etapas $match y $sort. Considera usar una consulta cubierta si es posible, o pre-agregar datos para informes accedidos frecuentemente.


Necesitas almacenar sesiones de usuario, que expiran después de 30 minutos de inactividad. ¿Cómo implementarías esto eficientemente en MongoDB?

Respuesta:

Usa un índice TTL (Time-To-Live) en un campo de marca de tiempo (por ejemplo, lastActivity) en tu colección 'sessions'. Crea el índice con db.sessions.createIndex({ lastActivity: 1 }, { expireAfterSeconds: 1800 }). MongoDB eliminará automáticamente los documentos con más de 30 minutos de antigüedad.


Tu aplicación necesita realizar actualizaciones atómicas en un documento, incrementando un contador y añadiendo un elemento a un array. ¿Cómo asegurarías la consistencia de los datos?

Respuesta:

Usa una única operación db.collection.updateOne() con los operadores $inc y $push. MongoDB garantiza la atomicidad para escrituras de un solo documento. Por ejemplo: db.products.updateOne({ _id: productId }, { $inc: { stock: -1 }, $push: { buyers: userId } }).


Una colección 'events' tiene un campo 'location', que es un array de coordenadas [longitude, latitude]. ¿Cómo encontrarías todos los eventos dentro de un radio de 5 km de un punto dado?

Respuesta:

Crea un índice 2dsphere en el campo 'location': db.events.createIndex({ location: '2dsphere' }). Luego, usa el operador $geoWithin con $centerSphere para la consulta: db.events.find({ location: { $geoWithin: { $centerSphere: [[lon, lat], radiusInRadians] } } }).


Estás migrando datos de una base de datos relacional a MongoDB. Tienes una tabla 'customers' y una tabla 'addresses' con una relación uno a muchos. ¿Cómo modelarías esto en MongoDB?

Respuesta:

Si las direcciones se acceden frecuentemente con los clientes y no son demasiado numerosas, incrustalas como un array dentro del documento del cliente. Si las direcciones son grandes, numerosas o compartidas, usa una colección 'addresses' separada y referéncialas por _id en el documento del cliente.


Tu conjunto de réplicas de MongoDB tiene un primario y dos secundarios. El primario deja de funcionar. ¿Qué sucede y cómo asegura MongoDB la alta disponibilidad?

Respuesta:

Cuando el primario deja de funcionar, los miembros restantes celebran una elección. Uno de los secundarios será elegido como el nuevo primario. Este proceso asegura la alta disponibilidad y el failover automático, completándose típicamente en segundos.


Necesitas realizar una consulta analítica compleja que involucre unir datos de dos colecciones diferentes y realizar múltiples agregaciones. ¿Qué característica de MongoDB usarías?

Respuesta:

El Aggregation Pipeline con la etapa $lookup. $lookup realiza una unión externa izquierda (left outer join) a una colección no sharded en la misma base de datos, permitiéndote combinar datos de múltiples colecciones antes de realizar etapas de agregación adicionales como $group, $match y $sort.


Optimización de Rendimiento y Mejores Prácticas

Solución de Problemas y Depuración de MongoDB

¿Cuáles son los primeros pasos que tomas cuando una aplicación MongoDB tiene un rendimiento lento?

Respuesta:

Primero, revisaría los logs de MongoDB en busca de errores o consultas lentas. Luego, usaría mongostat y mongotop para monitorear métricas de rendimiento en tiempo real e identificar operaciones activas o colecciones que consumen recursos. Finalmente, analizaría db.currentOp() para ver las operaciones en curso.


¿Cómo identificas las consultas de ejecución lenta en MongoDB?

Respuesta:

Utilizo el comando db.setProfilingLevel(1, { slowms: 100 }) para habilitar el perfilado de la base de datos, que registra las consultas que exceden un umbral especificado. Alternativamente, puedo usar db.system.profile.find() para consultar directamente la colección del perfilador en busca de operaciones lentas. El plan explain() también es crucial para comprender la ejecución de la consulta.


Una consulta es consistentemente lenta. ¿Qué herramientas y técnicas usarías para optimizarla?

Respuesta:

Usaría explain('executionStats') para analizar el plan de consulta, identificar índices faltantes o etapas ineficientes. Basado en la salida de explain, crearía los índices apropiados. Si la indexación no es suficiente, consideraría una rediseño del esquema o una reestructuración de la consulta.


¿Cómo depuras una alta utilización de CPU en un servidor MongoDB?

Respuesta:

Una alta utilización de CPU a menudo indica consultas ineficientes, índices faltantes o operaciones de escritura excesivas. Revisaría mongostat para operaciones activas, db.currentOp() para procesos de larga duración y el perfilador para consultas lentas. Herramientas a nivel de sistema como top o htop también pueden identificar el uso de CPU del proceso mongod.


¿Cuáles son las causas comunes de un alto uso de memoria en MongoDB y cómo las abordas?

Respuesta:

Un alto uso de memoria puede deberse a grandes conjuntos de trabajo (working sets), consultas ineficientes que extraen demasiados datos a la RAM, o pipelines de agregación no optimizados. Revisaría db.serverStatus().wiredTiger.cache para la utilización de la caché y aseguraría una indexación adecuada para reducir los datos escaneados. Podría ser necesario escalar la RAM o implementar sharding.


Describe cómo depurarías un conjunto de réplicas que no se está sincronizando correctamente.

Respuesta:

Comenzaría revisando rs.status() en todos los miembros para identificar el estado y la salud de cada nodo. Luego, examinaría los logs de MongoDB en cada miembro en busca de errores relacionados con la replicación, problemas de red o fallos en la aplicación del oplog. La conectividad de red entre los miembros también es una causa común.


¿Cuál es el propósito del perfilador de MongoDB y cómo se habilita?

Respuesta:

El perfilador de MongoDB captura información detallada sobre las operaciones de la base de datos, incluyendo tiempos de ejecución de consultas, bloqueos (locks) y E/S. Ayuda a identificar consultas y operaciones lentas. Lo habilitas usando db.setProfilingLevel(level, { slowms: threshold }), donde level puede ser 0 (apagado), 1 (operaciones lentas) o 2 (todas las operaciones).


¿Cómo manejas una situación en la que una instancia de MongoDB se queda sin espacio en disco?

Respuesta:

Primero, identificaría qué está consumiendo espacio usando db.stats() y db.collection.stats(). Luego, buscaría archivos de log grandes o copias de seguridad antiguas para eliminarlos. Si el problema es el crecimiento de datos, consideraría añadir más espacio en disco, implementar sharding o archivar datos antiguos para reducir el conjunto de trabajo.


Sospechas de una operación bloqueada (deadlock). ¿Cómo investigarías esto en MongoDB?

Respuesta:

MongoDB utiliza control de concurrencia optimista, por lo que los deadlocks reales son raros. Sin embargo, las operaciones de larga duración que mantienen bloqueos pueden bloquear a otras. Usaría db.currentOp() para identificar operaciones con el estado waitingForLock y ver qué operación está manteniendo el bloqueo. Podría terminar la operación bloqueante si es necesario.


¿Cuáles son las métricas clave que monitoreas para la salud y el rendimiento de MongoDB?

Respuesta:

Las métricas clave incluyen opcounters (lecturas, escrituras, comandos), connections (actuales, disponibles), network (bytes de entrada/salida), memory (residente, virtual, mapeada), wiredTiger.cache (bytes sucios, páginas leídas/escritas) y locks (global, base de datos, colección). Estas proporcionan información sobre la carga de trabajo y la utilización de recursos.


MongoDB para Roles Específicos (Desarrollador, DBA, DevOps)

Desarrollador: ¿Cómo manejas el diseño de esquemas en MongoDB, dada su naturaleza sin esquemas (schemaless)?

Respuesta:

Aunque MongoDB no tiene esquemas fijos, es crucial diseñar un esquema implícito. Esto implica incrustar datos relacionados para consultas comunes para minimizar las uniones (joins) y usar referencias para conjuntos de datos menos accedidos o de gran tamaño. El objetivo es optimizar el rendimiento de lectura y la localidad de los datos.


Desarrollador: Explica la diferencia entre find() y aggregate() en las consultas de MongoDB.

Respuesta:

find() se utiliza para consultas básicas para recuperar documentos que coinciden con criterios especificados, a menudo con proyección y ordenación. aggregate() es un framework más potente para el procesamiento de datos, que permite pipelines de múltiples etapas para realizar operaciones como agrupar, unir (join) y transformar documentos.


DBA: ¿Qué es un conjunto de réplicas (replica set) y por qué es importante para los despliegues de MongoDB en producción?

Respuesta:

Un conjunto de réplicas es un grupo de procesos de MongoDB que mantienen el mismo conjunto de datos, proporcionando alta disponibilidad y redundancia de datos. Asegura la conmutación por error automática (failover) si el nodo primario falla, previniendo el tiempo de inactividad y la pérdida de datos, y también puede usarse para escalar lecturas.


DBA: ¿Cómo monitoreas el rendimiento de una instancia de MongoDB?

Respuesta:

El monitoreo del rendimiento implica verificar métricas como db.serverStatus() para operaciones, conexiones y uso de memoria. Se utilizan herramientas como MongoDB Atlas Monitoring, Ops Manager o soluciones de terceros para rastrear indicadores clave de rendimiento (KPIs) como la latencia de consultas, el uso de índices y el retraso de replicación (replication lag).


DevOps: Describe el proceso de despliegue de un clúster con sharding en MongoDB.

Respuesta:

El despliegue de un clúster con sharding implica la configuración de servidores de configuración (config servers) (para almacenar metadatos), routers mongos (para enrutar consultas) y conjuntos de réplicas de fragmentos (shard replica sets) (para almacenar datos). El proceso incluye la inicialización de los conjuntos de réplicas, la adición de fragmentos (shards) al clúster y la habilitación del sharding en bases de datos y colecciones.


DevOps: ¿Cómo realizas copias de seguridad (backups) y restauraciones en MongoDB?

Respuesta:

Las copias de seguridad se pueden realizar utilizando mongodump para copias de seguridad lógicas o instantáneas del sistema de archivos (filesystem snapshots) para copias de seguridad físicas. Para las restauraciones, se utiliza mongorestore para copias de seguridad lógicas. Para clústeres con sharding, las copias de seguridad consistentes requieren un enfoque coordinado, a menudo utilizando un agente de copia de seguridad dedicado o servicios de proveedores de nube.


Desarrollador: ¿Cuándo usarías un documento incrustado (embedded document) en lugar de un documento referenciado (referenced document)?

Respuesta:

Incrusta documentos cuando los datos se acceden frecuentemente juntos, tienen una relación uno a pocos (one-to-few) y no crecen de forma ilimitada. Referencia documentos cuando los datos son grandes, tienen una relación uno a muchos o muchos a muchos (one-to-many or many-to-many), o necesitan ser accedidos de forma independiente, para evitar límites de tamaño de documento y mejorar la eficiencia de las actualizaciones.


DBA: ¿Qué son los índices (indexes) en MongoDB y por qué son cruciales para el rendimiento de las consultas?

Respuesta:

Los índices son estructuras de datos especiales que almacenan una pequeña porción de los datos de la colección en un formato fácil de recorrer. Mejoran significativamente el rendimiento de las consultas al permitir que MongoDB localice rápidamente los documentos sin escanear toda la colección, similar a los índices en bases de datos relacionales.


DevOps: ¿Cómo manejas las actualizaciones continuas (rolling upgrades) para un conjunto de réplicas de MongoDB?

Respuesta:

Las actualizaciones continuas implican actualizar los miembros secundarios uno por uno, comenzando por el secundario de menor prioridad, luego el siguiente, y finalmente degradando al primario para actualizarlo. Esto minimiza el tiempo de inactividad al asegurar que siempre haya un primario disponible durante el proceso de actualización.


Desarrollador: Explica el concepto de Write Concerns en MongoDB.

Respuesta:

Las Write Concerns describen el nivel de acuse de recibo solicitado a MongoDB para las operaciones de escritura. Opciones como w: 1 (solo primario) o w: 'majority' (mayoría de los miembros del conjunto de réplicas) controlan la durabilidad y la consistencia, afectando el rendimiento y la seguridad de los datos.


Tareas Prácticas y Prácticas de MongoDB

¿Cómo te conectas a una base de datos MongoDB desde la Shell de MongoDB y listas todas las bases de datos disponibles?

Respuesta:

Para conectarte, usa mongo o mongosh. Para listar bases de datos, usa show dbs o show databases. Para cambiar a una base de datos específica, usa use <nombre_de_la_base_de_datos>.


Escribe una consulta de MongoDB para insertar un único documento en una colección llamada 'products' con los campos 'name', 'price' y 'category'.

Respuesta:

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


¿Cómo encontrarías todos los documentos en la colección 'orders' donde el 'status' es 'pending' y el 'totalAmount' es mayor que 100?

Respuesta:

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


Explica cómo actualizar un único documento en la colección 'users', estableciendo la 'age' a 30 para el usuario con 'username' 'john_doe'.

Respuesta:

db.users.updateOne({ username: 'john_doe' }, { $set: { age: 30 } }); Esto actualiza el primer documento que coincide con el filtro.


Necesitas eliminar todos los documentos de la colección 'logs' que sean anteriores a una fecha específica (por ejemplo, '2023-01-01'). ¿Cómo lo harías?

Respuesta:

db.logs.deleteMany({ timestamp: { $lt: ISODate('2023-01-01T00:00:00Z') } }); Esto elimina todos los documentos donde la marca de tiempo (timestamp) es menor que la fecha especificada.


Describe cómo crear un índice en el campo 'email' de la colección 'users' para asegurar la unicidad.

Respuesta:

db.users.createIndex({ email: 1 }, { unique: true }); Esto crea un índice único ascendente en el campo 'email', previniendo direcciones de correo electrónico duplicadas.


¿Cómo realizas una agregación básica para contar el número de documentos en la colección 'orders' agrupados por 'status'?

Respuesta:

db.orders.aggregate([ { group: { _id: 'status', count: { $sum: 1 } } } ]); Esto agrupa los documentos por su 'status' y los cuenta.


Tienes una colección 'articles' con un array 'tags'. ¿Cómo encontrarías todos los artículos que tienen tanto 'MongoDB' como 'NoSQL' como etiquetas?

Respuesta:

db.articles.find({ tags: { $all: ['MongoDB', 'NoSQL'] } }); Esta consulta asegura que ambas etiquetas especificadas estén presentes en el array 'tags'.


Explica el propósito del método explain() en MongoDB y proporciona un ejemplo de su uso.

Respuesta:

El método explain() proporciona información sobre el plan de ejecución de una consulta, ayudando a optimizar el rendimiento. Ejemplo: db.products.find({ price: { $gt: 500 } }).explain('executionStats');


¿Cómo harías una copia de seguridad de una base de datos MongoDB específica llamada 'mydatabase' utilizando herramientas de línea de comandos?

Respuesta:

Usa mongodump --db mydatabase --out /ruta/al/directorio/de/copia/de/seguridad. Este comando crea un volcado BSON de la base de datos especificada en el directorio de salida.


Resumen

Dominar MongoDB para entrevistas es un viaje que se beneficia enormemente de una preparación exhaustiva. Al familiarizarte con preguntas comunes, comprender los conceptos centrales y practicar tus explicaciones, no solo aumentas tu confianza, sino que también demuestras un sólido dominio de la tecnología. Esta preparación es clave para articular tus habilidades de manera efectiva y dejar una impresión duradera.

Recuerda que el panorama tecnológico está en constante evolución. Continúa explorando nuevas características, mejores prácticas y discusiones de la comunidad para profundizar tu experiencia. Tu dedicación al aprendizaje continuo no solo te servirá bien en las entrevistas, sino que también te permitirá sobresalir en tu carrera como profesional de MongoDB. ¡Sigue aprendiendo, sigue construyendo y sigue creciendo!