Questions et Réponses d'Entretien MongoDB

MongoDBMongoDBBeginner
Pratiquer maintenant

Introduction

Bienvenue dans ce guide complet sur les questions et réponses d'entretien MongoDB ! Que vous soyez un professionnel expérimenté cherchant à rafraîchir vos connaissances ou un nouveau venu se préparant pour votre premier rôle MongoDB, ce document est conçu pour vous fournir les informations nécessaires pour exceller. Nous avons méticuleusement sélectionné un large éventail de sujets, des concepts fondamentaux aux fonctionnalités avancées, en passant par l'administration, l'optimisation des performances et le dépannage. Plongez pour explorer des défis basés sur des scénarios, des tâches pratiques et du contenu spécialisé adapté à divers rôles, vous assurant ainsi d'être bien préparé pour tout entretien lié à MongoDB. Bonne chance dans votre parcours pour maîtriser MongoDB !

MONGODB

Fondamentaux et Concepts Clés de MongoDB

Qu'est-ce que MongoDB et quel type de base de données est-ce ?

Réponse :

MongoDB est un programme de base de données NoSQL open-source populaire. C'est une base de données orientée document, ce qui signifie qu'elle stocke les données dans des documents flexibles, similaires à JSON, plutôt que dans des tables traditionnelles avec des lignes et des colonnes. Cette conception sans schéma permet un développement et une évolution rapides des structures de données.


Expliquez le concept de 'document' dans MongoDB.

Réponse :

Dans MongoDB, un document est l'unité de base des données, analogue à une ligne dans une base de données relationnelle. Les documents sont des objets BSON (Binary JSON), qui sont riches, flexibles et peuvent contenir des documents et des tableaux imbriqués. Chaque document possède un champ _id unique.


Qu'est-ce qu'une 'collection' dans MongoDB ?

Réponse :

Une collection dans MongoDB est un regroupement de documents. Elle est analogue à une table dans une base de données relationnelle, mais contrairement aux tables, les collections n'imposent pas de schéma. Les documents au sein d'une collection peuvent avoir des champs et des structures différents, offrant une flexibilité de schéma.


Comment MongoDB assure-t-il une haute disponibilité et une redondance des données ?

Réponse :

MongoDB assure une haute disponibilité et une redondance des données grâce aux replica sets. Un replica set est un groupe d'instances MongoDB qui maintiennent le même ensemble de données. Il se compose d'un nœud primaire qui reçoit toutes les opérations d'écriture et de plusieurs nœuds secondaires qui répliquent les données du primaire, offrant un basculement automatique (failover).


Qu'est-ce que le sharding dans MongoDB et pourquoi est-il utilisé ?

Réponse :

Le sharding est une méthode de distribution des données sur plusieurs machines (shards) pour prendre en charge des déploiements avec de très grands ensembles de données et des opérations à haut débit. Il permet à MongoDB de scaler horizontalement en partitionnant les données et en distribuant la charge, surmontant ainsi les limitations d'un serveur unique.


Expliquez la différence entre _id et une clé primaire dans une base de données relationnelle.

Réponse :

Le champ _id dans MongoDB est un identifiant unique pour chaque document, similaire à une clé primaire. Cependant, _id est automatiquement indexé et peut être de différents types de données, pas seulement des entiers. Contrairement aux clés primaires traditionnelles, le _id de MongoDB est souvent un ObjectId, un type BSON de 12 octets conçu pour les systèmes distribués.


Quel est le rôle des index dans MongoDB ?

Réponse :

Les index dans MongoDB sont des structures de données spéciales qui stockent une petite partie des données de la collection sous une forme facile à parcourir. Ils améliorent l'efficacité des opérations de lecture en permettant à la base de données de localiser rapidement les documents sans avoir à scanner chaque document d'une collection. Sans index, MongoDB doit effectuer un scan de collection.


Comment insérer un seul document dans une collection MongoDB en utilisant le shell mongo ?

Réponse :

Pour insérer un seul document, vous utilisez la méthode insertOne(). Par exemple : db.mycollection.insertOne({ name: 'Alice', age: 30, city: 'New York' });. Cette commande ajoute un nouveau document à la collection mycollection.


Comment interroger des documents dans MongoDB ?

Réponse :

Les documents sont interrogés à l'aide de la méthode find(), qui prend un document de filtre de requête comme premier argument. Par exemple, db.users.find({ age: { $gt: 25 } }) récupère tous les utilisateurs de plus de 25 ans. Le deuxième argument peut être une projection pour spécifier les champs retournés.


Qu'est-ce que le Framework d'Agrégation de MongoDB ?

Réponse :

Le Framework d'Agrégation de MongoDB est un outil puissant pour traiter les enregistrements de données et retourner des résultats calculés. Il utilise un concept de pipeline, où les documents passent par une série d'étapes (par exemple, $match, $group, $project, $sort) pour transformer et agréger les données, similaire à la clause GROUP BY de SQL.


Fonctionnalités Avancées et Développement MongoDB

Expliquez le but et les avantages du Framework d'Agrégation de MongoDB.

Réponse :

Le Framework d'Agrégation traite les enregistrements de données et retourne des résultats calculés. Il permet des transformations de données complexes, le filtrage, le regroupement et l'analyse au sein de la base de données, réduisant ainsi le besoin de traitement côté client et améliorant les performances pour les requêtes analytiques.


Que sont les transactions dans MongoDB et quand les utiliseriez-vous ?

Réponse :

MongoDB prend en charge les transactions ACID multi-documents sur les replica sets et les clusters sharded. Elles garantissent la cohérence et l'atomicité des données pour les opérations impliquant plusieurs documents ou collections, ce qui est crucial pour les transactions financières ou la gestion des stocks où toutes les opérations doivent réussir ou échouer ensemble.


Décrivez le concept de Change Streams dans MongoDB et un cas d'utilisation pratique.

Réponse :

Les Change Streams permettent aux applications d'accéder aux modifications de données en temps réel (insertions, mises à jour, suppressions) qui se produisent dans une collection, une base de données ou un déploiement. Un cas d'utilisation pratique est les tableaux de bord d'analyse en temps réel, la synchronisation des données entre systèmes, ou le déclenchement d'actions immédiates basées sur des modifications de données.


Comment gérez-vous la validation de schéma dans MongoDB ?

Réponse :

MongoDB prend en charge la validation de schéma à l'aide de JSON Schema. Vous pouvez définir des règles de validation au niveau de la collection, garantissant que les documents insérés ou mis à jour sont conformes à une structure et à des types de données spécifiés. Cela permet de maintenir l'intégrité et la cohérence des données.


Qu'est-ce que le sharding dans MongoDB et pourquoi est-il utilisé ?

Réponse :

Le sharding est une méthode de distribution des données sur plusieurs machines (shards) pour prendre en charge des déploiements avec de très grands ensembles de données et des opérations à haut débit. Il permet la mise à l'échelle horizontale, permettant à MongoDB de gérer plus de données et de trafic qu'un serveur unique ne le pourrait.


Expliquez la différence entre une requête couverte (covered query) et un plan d'exécution basé uniquement sur l'index (index-only plan).

Réponse :

Une requête couverte est une requête où tous les champs demandés dans la requête et le prédicat de requête (clause WHERE) sont inclus dans l'index. Cela signifie que MongoDB peut retourner les résultats directement à partir de l'index sans accéder aux documents réels, ce qui entraîne des améliorations significatives des performances.


Que sont GridFS et ses cas d'utilisation typiques ?

Réponse :

GridFS est une spécification pour stocker et récupérer de gros fichiers (comme des images, de l'audio, de la vidéo) dans MongoDB. Il divise les fichiers en morceaux (chunks) et stocke chaque morceau comme un document distinct. Il est généralement utilisé lorsque vous devez stocker des fichiers avec d'autres données, ou lorsque votre système de fichiers n'est pas adapté aux données binaires volumineuses.


Comment optimiser les performances des opérations d'écriture dans MongoDB ?

Réponse :

L'optimisation des opérations d'écriture implique l'utilisation de write concerns appropriés (par exemple, w: 0 pour "fire-and-forget", w: 1 pour une simple confirmation), le regroupement des écritures à l'aide de bulkWrite(), et la garantie d'indexation efficace pour éviter les scans de collection lors des mises à jour ou des insertions. Pensez également au sharding pour un débit d'écriture élevé.


Quand utiliseriez-vous un index de texte (text index) dans MongoDB ?

Réponse :

Un index de texte est utilisé pour prendre en charge les requêtes de recherche textuelle sur le contenu textuel de vos documents. Il permet une recherche efficace de mots et de phrases, y compris la racinisation (stemming) et la suppression des mots vides (stop words). Il est idéal pour implémenter des fonctionnalités de recherche comme les descriptions de produits ou le contenu d'articles.


Décrivez le concept d'index TTL et son application.

Réponse :

Un index TTL (Time-To-Live) est un type spécial d'index sur un seul champ que MongoDB utilise pour supprimer automatiquement les documents d'une collection après une certaine période ou à une heure spécifique. Il est couramment utilisé pour gérer les données de session, les données de journalisation ou les caches temporaires qui expirent.


Administration et Opérations MongoDB

Comment effectuer une sauvegarde et une restauration dans MongoDB ?

Réponse :

Les sauvegardes sont généralement effectuées à l'aide de mongodump pour créer des fichiers BSON, et les restaurations à l'aide de mongorestore. Pour les replica sets, il est préférable de faire un dump à partir d'un membre secondaire pour éviter d'impacter les performances du primaire. Pour les clusters sharded, mongodump doit être exécuté contre une instance mongos.


Expliquez le rôle de l'Oplog de MongoDB. Comment est-il lié à la réplication ?

Réponse :

L'Oplog (operations log) est une collection spéciale "capped" qui enregistre toutes les opérations d'écriture appliquées à l'ensemble de données du primaire. Les membres secondaires suivent continuellement l'oplog du primaire et appliquent ces opérations à leurs propres ensembles de données, garantissant ainsi la cohérence des données et permettant la réplication.


Quelle est la différence entre un replica set et le sharding dans MongoDB ?

Réponse :

Un replica set fournit une haute disponibilité et une redondance des données en maintenant plusieurs copies des données. Le sharding fournit une scalabilité horizontale en distribuant les données sur plusieurs serveurs (shards), permettant ainsi de gérer des ensembles de données plus importants et un débit plus élevé.


Comment surveiller les performances d'une instance MongoDB ?

Réponse :

Les outils clés incluent mongostat pour les statistiques en temps réel, mongotop pour l'activité de lecture/écriture par collection, et db.serverStatus() pour des métriques serveur détaillées. Les solutions de surveillance cloud comme MongoDB Atlas Monitoring ou les outils tiers sont également couramment utilisés.


Décrivez les étapes pour ajouter un nouveau membre à un replica set MongoDB existant.

Réponse :

Tout d'abord, démarrez la nouvelle instance mongod avec le nom correct du replica set. Ensuite, connectez-vous au primaire et utilisez rs.add('hostname:port') pour ajouter le nouveau membre. Le nouveau membre commencera alors à synchroniser les données à partir d'un membre existant.


Quelles sont les causes courantes de requêtes lentes dans MongoDB et comment les diagnostiquer ?

Réponse :

Les causes courantes incluent des index manquants ou inefficaces, des scans de collection volumineux et des modèles de requêtes inefficaces. Le diagnostic implique l'utilisation de db.collection.explain() pour analyser les plans d'exécution des requêtes et identifier les requêtes qui effectuent des scans complets de collection ou utilisent des index inefficaces.


Comment gérez-vous la sécurité dans MongoDB ? Quelles sont les meilleures pratiques ?

Réponse :

La sécurité implique l'activation de l'authentification (SCRAM-SHA-256), la mise en œuvre du contrôle d'accès basé sur les rôles (RBAC), l'activation de TLS/SSL pour le chiffrement en transit, et la garantie de l'isolation réseau. L'audit et les mises à jour de sécurité régulières sont également cruciaux.


Quand envisageriez-vous le sharding d'un cluster MongoDB ?

Réponse :

Le sharding est envisagé lorsqu'un seul replica set ne peut plus gérer le volume de données ou le débit de lecture/écriture. Cela se produit généralement lorsque le "working set" dépasse la RAM, entraînant des E/S disque excessives, ou lorsque le nombre d'opérations par seconde devient trop élevé pour un seul serveur.


Expliquez le concept de 'write concern' dans MongoDB.

Réponse :

Le "write concern" décrit le niveau d'accusé de réception demandé à MongoDB pour une opération d'écriture. Les options incluent w: 1 (accusé de réception du primaire), w: 'majority' (accusé de réception de la majorité des membres du replica set), ou w: 0 (aucun accusé de réception).


Quel est le rôle du journal dans MongoDB ?

Réponse :

Le journal est un log d'écriture anticipée (write-ahead log) qui enregistre les modifications de données avant qu'elles ne soient appliquées aux fichiers de données. Il garantit la durabilité et la cohérence des données, permettant à MongoDB de récupérer un état cohérent après un arrêt inattendu sans perte de données.


Questions Basées sur des Scénarios et Résolution de Problèmes

Vous avez une collection d''orders' avec des millions de documents. Chaque commande a un champ 'status' (par exemple, 'pending', 'shipped', 'delivered') et un champ 'timestamp'. Comment trouveriez-vous efficacement toutes les commandes 'pending' des dernières 24 heures ?

Réponse :

Créez un index composé sur { status: 1, timestamp: -1 }. Ensuite, interrogez en utilisant db.orders.find({ status: 'pending', timestamp: { $gte: ISODate('...') } }). L'index permettra un filtrage efficace par statut et des scans de plage sur le timestamp.


Votre application a besoin d'accéder fréquemment aux profils utilisateur par 'username' et 'email'. Comment concevriez-vous vos index pour supporter efficacement les deux types de recherche ?

Réponse :

Créez deux index de champ unique distincts : db.users.createIndex({ username: 1 }) et db.users.createIndex({ email: 1 }). Cela permet à MongoDB d'utiliser l'index approprié pour les requêtes basées sur l'un ou l'autre champ.


Une collection nommée 'products' a un champ 'price'. Vous devez trouver des produits dans une fourchette de prix spécifique et les trier par 'name'. Comment optimiseriez-vous cette requête ?

Réponse :

Créez un index composé sur { price: 1, name: 1 }. La requête serait db.products.find({ price: { $gte: 10, $lte: 50 } }).sort({ name: 1 }). Cet index supporte à la fois la requête de plage sur le prix et l'opération de tri sur le nom.


Vous concevez une application de médias sociaux. Les utilisateurs peuvent avoir de nombreux 'posts'. Devriez-vous intégrer les posts dans le document utilisateur ou utiliser une collection 'posts' séparée avec des références ? Justifiez votre choix.

Réponse :

Utilisez une collection 'posts' séparée avec des références. L'intégration entraînerait des documents utilisateur volumineux et en croissance, dépassant la limite BSON de 16 Mo et causant des problèmes de performance avec des mises à jour fréquentes. L'utilisation de références permet une croissance évolutive et une interrogation efficace des posts indépendamment.


Votre application rencontre des requêtes lentes lors de l'agrégation de données d'une collection 'logs'. Le pipeline d'agrégation implique $match, $group, et $sort. Quelles mesures prendriez-vous pour diagnostiquer et améliorer les performances ?

Réponse :

Tout d'abord, utilisez explain() sur le pipeline d'agrégation pour identifier les goulots d'étranglement. Assurez-vous que des index appropriés existent pour les champs utilisés dans les étapes $match et $sort. Envisagez d'utiliser une requête couverte si possible, ou de pré-agréger les données pour les rapports fréquemment consultés.


Vous devez stocker des sessions utilisateur, qui expirent après 30 minutes d'inactivité. Comment implémenteriez-vous cela efficacement dans MongoDB ?

Réponse :

Utilisez un index TTL (Time-To-Live) sur un champ de timestamp (par exemple, lastActivity) dans votre collection 'sessions'. Créez l'index avec db.sessions.createIndex({ lastActivity: 1 }, { expireAfterSeconds: 1800 }). MongoDB supprimera automatiquement les documents plus anciens que 30 minutes.


Votre application doit effectuer des mises à jour atomiques sur un document, en incrémentant un compteur et en ajoutant un élément à un tableau. Comment garantiriez-vous la cohérence des données ?

Réponse :

Utilisez une seule opération db.collection.updateOne() avec les opérateurs $inc et $push. MongoDB garantit l'atomicité pour les écritures sur un seul document. Par exemple : db.products.updateOne({ _id: productId }, { $inc: { stock: -1 }, $push: { buyers: userId } }).


Une collection 'events' a un champ 'location', qui est un tableau de coordonnées [longitude, latitude]. Comment trouveriez-vous tous les événements dans un rayon de 5 km d'un point donné ?

Réponse :

Créez un index 2dsphere sur le champ 'location' : db.events.createIndex({ location: '2dsphere' }). Ensuite, utilisez l'opérateur $geoWithin avec $centerSphere pour la requête : db.events.find({ location: { $geoWithin: { $centerSphere: [[lon, lat], radiusInRadians] } } }).


Vous migrez des données d'une base de données relationnelle vers MongoDB. Vous avez une table 'customers' et une table 'addresses' avec une relation un-à-plusieurs. Comment modéliseriez-vous cela dans MongoDB ?

Réponse :

Si les adresses sont fréquemment consultées avec les clients et ne sont pas trop nombreuses, intégrez-les sous forme de tableau dans le document client. Si les adresses sont volumineuses, nombreuses ou partagées, utilisez une collection 'addresses' séparée et référencez-les par leur _id dans le document client.


Votre replica set MongoDB a un primaire et deux secondaires. Le primaire tombe en panne. Que se passe-t-il et comment MongoDB assure-t-il la haute disponibilité ?

Réponse :

Lorsque le primaire tombe en panne, les membres restants organisent une élection. L'un des secondaires sera élu comme nouveau primaire. Ce processus garantit la haute disponibilité et le basculement automatique, s'achevant généralement en quelques secondes.


Vous devez effectuer une requête analytique complexe qui implique la jointure de données provenant de deux collections différentes et l'exécution de plusieurs agrégations. Quelle fonctionnalité MongoDB utiliseriez-vous ?

Réponse :

Le Pipeline d'Agrégation avec l'étape $lookup. $lookup effectue une jointure externe gauche vers une collection non sharded dans la même base de données, vous permettant de combiner des données de plusieurs collections avant d'effectuer d'autres étapes d'agrégation comme $group, $match, et $sort.


Optimisation des Performances et Bonnes Pratiques

Dépannage et Débogage de MongoDB

Quelles sont les premières étapes que vous entreprenez lorsqu'une application MongoDB est lente ?

Réponse :

Je vérifierais d'abord les journaux de MongoDB pour détecter les erreurs ou les requêtes lentes. Ensuite, j'utiliserais mongostat et mongotop pour surveiller les métriques de performance en temps réel et identifier les opérations actives ou les collections qui consomment des ressources. Enfin, j'analyserais db.currentOp() pour voir les opérations en cours.


Comment identifiez-vous les requêtes lentes dans MongoDB ?

Réponse :

J'utilise la commande db.setProfilingLevel(1, { slowms: 100 }) pour activer le profilage de la base de données, qui enregistre les requêtes dépassant un seuil spécifié. Alternativement, je peux utiliser db.system.profile.find() pour interroger directement la collection de profilage pour les opérations lentes. Le plan explain() est également crucial pour comprendre l'exécution des requêtes.


Une requête est constamment lente. Quels outils et techniques utiliseriez-vous pour l'optimiser ?

Réponse :

J'utiliserais explain('executionStats') pour analyser le plan de requête, identifier les index manquants ou les étapes inefficaces. Sur la base de la sortie de explain, je créerais les index appropriés. Si l'indexation n'est pas suffisante, j'envisagerais une refonte du schéma ou une restructuration de la requête.


Comment dépannez-vous une utilisation élevée du CPU sur un serveur MongoDB ?

Réponse :

Un CPU élevé indique souvent des requêtes inefficaces, des index manquants ou des opérations d'écriture excessives. Je vérifierais mongostat pour les opérations actives, db.currentOp() pour les processus de longue durée et le profileur pour les requêtes lentes. Les outils au niveau du système d'exploitation comme top ou htop peuvent également identifier l'utilisation du CPU par le processus mongod.


Quelles sont les causes courantes d'une utilisation élevée de la mémoire dans MongoDB et comment les abordez-vous ?

Réponse :

Une utilisation élevée de la mémoire peut être due à de grands ensembles de travail (working sets), des requêtes inefficaces qui chargent trop de données en RAM, ou des pipelines d'agrégation non optimisés. Je vérifierais db.serverStatus().wiredTiger.cache pour l'utilisation du cache et m'assurerais d'une indexation appropriée pour réduire les données scannées. Une augmentation de la RAM ou le sharding pourraient être nécessaires.


Décrivez comment vous débogueriez un replica set qui ne se synchronise pas correctement.

Réponse :

Je commencerais par vérifier rs.status() sur tous les membres pour identifier l'état et la santé de chaque nœud. Ensuite, j'examinerais les journaux de MongoDB sur chaque membre pour les erreurs liées à la réplication, les problèmes réseau ou les échecs d'application de l'oplog. La connectivité réseau entre les membres est également un coupable fréquent.


Quel est le but du profileur MongoDB et comment l'activez-vous ?

Réponse :

Le profileur MongoDB capture des informations détaillées sur les opérations de base de données, y compris les temps d'exécution des requêtes, les verrous et les opérations d'E/S. Il aide à identifier les requêtes et les opérations lentes. Vous l'activez en utilisant db.setProfilingLevel(level, { slowms: threshold }), où level peut être 0 (désactivé), 1 (opérations lentes) ou 2 (toutes les opérations).


Comment gérez-vous une situation où une instance MongoDB manque d'espace disque ?

Réponse :

Tout d'abord, j'identifierais ce qui consomme de l'espace en utilisant db.stats() et db.collection.stats(). Ensuite, je rechercherais les fichiers journaux volumineux ou les anciennes sauvegardes à supprimer. Si la croissance des données est le problème, j'envisagerais d'ajouter plus d'espace disque, de mettre en œuvre le sharding, ou d'archiver les anciennes données pour réduire l'ensemble de travail.


Vous suspectez une opération bloquée (deadlock). Comment enquêteriez-vous sur cela dans MongoDB ?

Réponse :

MongoDB utilise un contrôle de concurrence optimiste, donc les vrais deadlocks sont rares. Cependant, les opérations de longue durée qui détiennent des verrous peuvent en bloquer d'autres. J'utiliserais db.currentOp() pour identifier les opérations avec le statut waitingForLock et voir quelle opération détient le verrou. Je pourrais alors terminer l'opération bloquante si nécessaire.


Quelles sont les métriques clés que vous surveillez pour la santé et les performances de MongoDB ?

Réponse :

Les métriques clés incluent opcounters (lectures, écritures, commandes), connections (actuelles, disponibles), network (octets entrants/sortants), memory (résidente, virtuelle, mappée), wiredTiger.cache (octets sales, pages lues/écrites) et locks (global, base de données, collection). Celles-ci fournissent des informations sur la charge de travail et l'utilisation des ressources.


MongoDB pour des Rôles Spécifiques (Développeur, DBA, DevOps)

Développeur : Comment gérez-vous la conception de schéma dans MongoDB, compte tenu de sa nature sans schéma ?

Réponse :

Bien que MongoDB soit sans schéma, il est crucial de concevoir un schéma implicite. Cela implique d'intégrer les données liées pour les requêtes courantes afin de minimiser les jointures et d'utiliser la référence pour les ensembles de données moins fréquemment consultés ou volumineux. L'objectif est d'optimiser les performances de lecture et la localité des données.


Développeur : Expliquez la différence entre find() et aggregate() dans les requêtes MongoDB.

Réponse :

find() est utilisé pour les requêtes de base afin de récupérer les documents qui correspondent aux critères spécifiés, souvent avec projection et tri. aggregate() est un framework plus puissant pour le traitement des données, permettant des pipelines à plusieurs étapes pour effectuer des opérations telles que le regroupement, la jointure et la transformation de documents.


DBA : Qu'est-ce qu'un replica set et pourquoi est-il important pour les déploiements MongoDB en production ?

Réponse :

Un replica set est un groupe de processus MongoDB qui maintiennent le même ensemble de données, offrant une haute disponibilité et une redondance des données. Il assure un basculement automatique si le nœud primaire tombe en panne, empêchant les temps d'arrêt et la perte de données, et peut également être utilisé pour la mise à l'échelle en lecture.


DBA : Comment surveillez-vous les performances d'une instance MongoDB ?

Réponse :

La surveillance des performances implique la vérification de métriques telles que db.serverStatus() pour les opérations, les connexions et l'utilisation de la mémoire. Des outils comme MongoDB Atlas Monitoring, Ops Manager ou des solutions tierces sont utilisés pour suivre les indicateurs clés de performance (KPI) tels que la latence des requêtes, l'utilisation des index et le retard de réplication.


DevOps : Décrivez le processus de déploiement d'un cluster sharded dans MongoDB.

Réponse :

Le déploiement d'un cluster sharded implique la configuration des serveurs de configuration (pour stocker les métadonnées), des routeurs mongos (pour router les requêtes) et des replica sets de shard (pour stocker les données). Le processus comprend l'initialisation des replica sets, l'ajout de shards au cluster et l'activation du sharding sur les bases de données et les collections.


DevOps : Comment effectuez-vous les sauvegardes et les restaurations dans MongoDB ?

Réponse :

Les sauvegardes peuvent être effectuées à l'aide de mongodump pour les sauvegardes logiques ou de snapshots du système de fichiers pour les sauvegardes physiques. Pour les restaurations, mongorestore est utilisé pour les sauvegardes logiques. Pour les clusters sharded, des sauvegardes cohérentes nécessitent une approche coordonnée, souvent à l'aide d'un agent de sauvegarde dédié ou des services du fournisseur cloud.


Développeur : Quand utiliseriez-vous un document embarqué par rapport à un document référencé ?

Réponse :

Embarquez des documents lorsque les données sont fréquemment consultées ensemble, ont une relation un-à-peu (one-to-few) et ne croissent pas de manière illimitée. Référencez des documents lorsque les données sont volumineuses, ont une relation un-à-plusieurs ou plusieurs-à-plusieurs, ou doivent être consultées indépendamment, afin d'éviter les limites de taille des documents et d'améliorer l'efficacité des mises à jour.


DBA : Que sont les index dans MongoDB et pourquoi sont-ils cruciaux pour les performances des requêtes ?

Réponse :

Les index sont des structures de données spéciales qui stockent une petite partie des données de la collection sous une forme facile à parcourir. Ils améliorent considérablement les performances des requêtes en permettant à MongoDB de localiser rapidement les documents sans scanner toute la collection, de manière similaire aux index des bases de données relationnelles.


DevOps : Comment gérez-vous les mises à niveau progressives (rolling upgrades) pour un replica set MongoDB ?

Réponse :

Les mises à niveau progressives impliquent la mise à niveau des membres secondaires un par un, en commençant par le secondaire de priorité la plus basse, puis le suivant, et enfin en faisant basculer le primaire pour le mettre à niveau. Cela minimise les temps d'arrêt en garantissant qu'un primaire est toujours disponible pendant le processus de mise à niveau.


Développeur : Expliquez le concept de Write Concerns dans MongoDB.

Réponse :

Les Write Concerns décrivent le niveau d'accusé de réception demandé à MongoDB pour les opérations d'écriture. Des options comme w: 1 (primaire uniquement) ou w: 'majority' (majorité des membres du replica set) contrôlent la durabilité et la cohérence, affectant les performances et la sécurité des données.


Tâches MongoDB Pratiques et Concrètes

Comment vous connectez-vous à une base de données MongoDB depuis le MongoDB Shell et listez-vous toutes les bases de données disponibles ?

Réponse :

Pour vous connecter, utilisez mongo ou mongosh. Pour lister les bases de données, utilisez show dbs ou show databases. Pour basculer vers une base de données spécifique, utilisez use <nom_de_la_base_de_données>.


Écrivez une requête MongoDB pour insérer un seul document dans une collection nommée 'products' avec les champs 'name', 'price' et 'category'.

Réponse :

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


Comment trouveriez-vous tous les documents de la collection 'orders' où le 'status' est 'pending' et le 'totalAmount' est supérieur à 100 ?

Réponse :

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


Expliquez comment mettre à jour un seul document dans la collection 'users', en définissant l''age' à 30 pour l'utilisateur avec le 'username' 'john_doe'.

Réponse :

db.users.updateOne({ username: 'john_doe' }, { $set: { age: 30 } }); Ceci met à jour le premier document correspondant au filtre.


Vous devez supprimer tous les documents de la collection 'logs' qui sont antérieurs à une date spécifique (par exemple, '2023-01-01'). Comment feriez-vous cela ?

Réponse :

db.logs.deleteMany({ timestamp: { $lt: ISODate('2023-01-01T00:00:00Z') } }); Ceci supprime tous les documents dont le timestamp est inférieur à la date spécifiée.


Décrivez comment créer un index sur le champ 'email' dans la collection 'users' pour garantir l'unicité.

Réponse :

db.users.createIndex({ email: 1 }, { unique: true }); Ceci crée un index unique ascendant sur le champ 'email', empêchant les adresses e-mail en double.


Comment effectuez-vous une agrégation de base pour compter le nombre de documents dans la collection 'orders' regroupés par 'status' ?

Réponse :

db.orders.aggregate([ { group: { _id: 'status', count: { $sum: 1 } } } ]); Ceci regroupe les documents par leur 'status' et les compte.


Vous avez une collection 'articles' avec un tableau 'tags'. Comment trouveriez-vous tous les articles qui ont à la fois 'MongoDB' et 'NoSQL' comme tags ?

Réponse :

db.articles.find({ tags: { $all: ['MongoDB', 'NoSQL'] } }); Cette requête garantit que les deux tags spécifiés sont présents dans le tableau 'tags'.


Expliquez le but de la méthode explain() dans MongoDB et donnez un exemple de son utilisation.

Réponse :

La méthode explain() fournit des informations sur le plan d'exécution d'une requête, aidant à optimiser les performances. Exemple : db.products.find({ price: { $gt: 500 } }).explain('executionStats');


Comment sauvegarderiez-vous une base de données MongoDB spécifique nommée 'mydatabase' en utilisant les outils en ligne de commande ?

Réponse :

Utilisez mongodump --db mydatabase --out /chemin/vers/le/repertoire/de/sauvegarde. Cette commande crée une sauvegarde BSON de la base de données spécifiée dans le répertoire de sortie.


Résumé

Maîtriser MongoDB pour les entretiens est un parcours qui bénéficie grandement d'une préparation approfondie. En vous familiarisant avec les questions courantes, en comprenant les concepts fondamentaux et en pratiquant vos explications, vous augmentez non seulement votre confiance, mais démontrez également une solide compréhension de la technologie. Cette préparation est essentielle pour articuler efficacement vos compétences et laisser une impression durable.

N'oubliez pas que le paysage technologique est en constante évolution. Continuez à explorer les nouvelles fonctionnalités, les meilleures pratiques et les discussions de la communauté pour approfondir votre expertise. Votre dévouement à l'apprentissage continu vous servira non seulement bien lors des entretiens, mais vous permettra également d'exceller dans votre carrière de professionnel MongoDB. Continuez à apprendre, à construire et à grandir !