Cours
À ce jour, j'ai mené de nombreux entretiens dans le domaine de la science des données et des bases de données. Les entreprises recherchent de plus en plus des professionnels possédant une expertise dans les bases de données nosql. MongoDB estl'une des bases de données les plus flexibles, capable de prendre en charge des applications modernes évolutives avec un temps d'indisponibilité minimal.
Dans cet article, j'ai compilé une liste de questions d'entretien que j'ai rencontrées, ainsi que des informations que j'ai recueillies auprès de mes collègues à partir de leurs expériences d'entretien.
Qu'est-ce que MongoDB ?
MongoDB est une base de données No-SQL qui store les données dans une architecture flexible et sans schéma. Contrairement aux tableaux traditionnels, il utilisedes documents et des collections pour enregistrer les enregistrements dans un format similaire à JSON appelé BSON. Ce format permet à MongoDB de stocker divers types de données dans un modèle hiérarchique.
Étant donné que MongoDB ne dispose pas d'un schéma fixe, il permet tout type de stockage, ce qui en fait un choix approprié pour l'analyse en temps réel et le streaming de données. De plus, les applications modernes connaissent souvent une croissance rapide ou un trafic imprévisible, ce que MongoDB est particulièrement bien équipé pour gérer. Par exemple, MongoDB prend en charge la mise à l'échelle horizontale, ce qui vous permet d'ajouter des serveurs supplémentaires pour gérer l'augmentation de la charge.
Obtenez une certification pour le poste d'analyste de données de vos rêves
Nos programmes de certification vous aident à vous démarquer et à prouver aux employeurs potentiels que vos compétences sont adaptées à l'emploi.

Questions d'entretien de base sur MongoDB
Dans cette section, nous nous concentrerons sur les questions fondamentales fréquemment posées lors des entretiens d'embauche chez MongoDB.
Veuillez expliquer le format de stockage BSON.
BSON signifie « notation binaire d'objet JavaScript ». Il stocke des documents JSON sérialisés dans un format codé en binaire et étend les capacités JSON en prenant en charge des types de données supplémentaires tels que Date, ObjectId et les expressions régulières.
Un document BSON contient généralement trois éléments : la taille du document, les éléments de champ (tels que le type de données, le nom et la valeur) et un terminateur nul, tous encodés au format binaire.
Le tableau suivant illustre les différences entre BSON et JSON, d'autant plus que BSON étend les capacités de JSON :
|
Caractéristique |
JSON |
BSON |
|
Format d'encodage |
Basé sur du texte |
Binaire |
|
Types de données pris en charge |
Chaîne, nombre, booléen, etc. |
Types JSON + Date, ObjectId, expressions régulières |
|
Lisibilité |
Lisible par l'être humain |
Lisible par machine |
|
Cas d'utilisation |
Échange de données |
Stockage des données dans MongoDB |
Qu'est-ce qu'une collection dans MongoDB ?
Une collection MongoDB est un ensemble de documents stockés dans une seule base de données. Cela s'apparente à un tableau dans une base de données relationnelle, où chaque document d'une collection correspond à une ligne dans une table. Cependant, la collection ne dispose pas d'un schéma fixe, ce qui signifie que les documents qu'elle contient peuvent être de types de données différents.
Comment effectuer une requête sur un document dans MongoDB ?
Dans MongoDB, il est possible d'interroger des documents à l'aide de la méthode find(). Pour rechercher tous les documents d'une collection, veuillez utiliser db.collection_name.find(). La méthode find dispose de deux paramètres d'entrée : query et projection. Le paramètre query est utilisé pour filtrer les documents qui correspondent à une condition spécifique.
Syntaxe du paramètre de requête :
db.collection_name.find({condition})
Le second est un paramètre de projection qui indique les colonnes à inclure ou à exclure dans la sortie. Veuillez attribuer la valeur 1 aux colonnes que vous souhaitez récupérer. Voici la syntaxe :
db.collection_name.find({},{column1: 1, column2: 1})
Quelle est la différence entre find() et findOne() ?
La méthode ` find() ` renvoie un curseur vers plusieurs documents qui correspondent aux critères de la requête. Ceci fonctionne en parcourant tous les résultats et en récupérant les documents correspondants. D'autre part, la méthode ` findOne() ` renvoie le premier document correspondant.
Que représente le champ _id dans MongoDB ?
Chaque document stocké dans une collection doit être doté d'un identifiant unique. Ce champ _id sert de clé primaire pour identifier de manière unique les documents d'une collection.
Questions d'entretien intermédiaire sur MongoDB
Passons maintenant à quelques concepts fondamentaux de MongoDB que le recruteur pourrait s'attendre à ce que vous maîtrisiez.
Comment MongoDB stocke-t-il les images et les vidéos volumineuses ?
Traditionnellement, MongoDB ne permet pas le stockage de documents supérieurs à 16 Mo. Cependant, il dispose d'une spécification spéciale appelée GridFS pour stocker et récupérer des fichiers de plus de 16 Mo. Il divise le fichier en segments plus petits et égaux, puis les stocke en interne sous forme de documents distincts.
Le tableau ci-dessous résume la manière dont MongoDB stocke les fichiers volumineux à l'aide de GridFS :
|
Étape |
Description |
|
Fragmentation de fichiers |
Divise les fichiers en segments plus petits de 255 Ko ou moins. |
|
Stockage des métadonnées |
Stocke les métadonnées relatives au fichier dans une collection d' |
|
Stockage par blocs |
Stocke des segments de fichiers dans une collection d' |
|
Récupération |
Reconstruit le fichier à partir des segments stockés. |
Comment MongoDB garantit-il une haute disponibilité ?
MongoDB assure une haute disponibilité grâce à la réplication. Les ensembles de répliques stockent différentes copies des données sur plusieurs nœuds afin que, si un nœud tombe en panne, un autre puisse prendre le relais.
Qu'est-ce que le partitionnement dans MongoDB ?
Le sharding permet une évolutivité horizontale dans MongoDB. Lorsqu'une seule instance ne peut pas gérer un ensemble de données volumineux, MongoDB divise les données en segments plus petits et les distribue sur plusieurs serveurs, appelés « shards ».
Le tableau suivant clarifie les différences entre la réplication et le partitionnement :
|
Caractéristique |
Replication |
Fragmentation |
|
Objectif |
Haute disponibilité |
Évolutivité pour les ensembles de données volumineux |
|
Mise en œuvre |
Ensembles de répliques (copies multiples) |
Données réparties entre plusieurs fragments |
|
Cas d'utilisation |
Tolérance aux défaillances |
Équilibrage de charge pour les bases de données volumineuses |
|
Distribution des données |
Tous les nœuds stockent les mêmes données. |
Les données sont réparties entre les nœuds. |
Qu'est-ce qu'un ensemble de répliques dans MongoDB ?
Dans MongoDB, un ensemble de répliques est un groupe d'instances qui gèrent le même ensemble de données. Ils sont déployés dans des applications qui nécessitent une haute disponibilité, car si une instance rencontre des difficultés, le système bascule automatiquement vers le prochain nœud disponible dans le jeu de répliques.
Veuillez expliquer le concept d'agrégation dans MongoDB.
MongoDB agrège les données provenant de plusieurs documents et les traite afin de fournir un résultat unique. Cela implique un pipeline d'agrégation, dans lequel les documents passent par plusieurs étapes, le résultat de chaque étape devenant l'entrée de la suivante. Un pipeline type peut inclure des étapes telles que la correspondance, le regroupement et le tri :
- Correspondance : filtre les documents en fonction des critères spécifiés.
- Groupe : Effectue une opération d'agrégation.
- Trier : Trie les résultats finaux selon nos besoins.
Qu'est-ce qu'une collection plafonnée dans MongoDB ?
Une collection plafonnée a une taille fixe et un nombre maximal de documents. Lorsque la limite est atteinte, le document le plus ancien est automatiquement écrasé et les informations les plus récentes sont enregistrées. Ce concept le rend adapté à des cas d'utilisation tels que la journalisation et la mise en cache.
Questions d'entretien avancées sur MongoDB
Dans cette section, nous examinons quelques questions et réponses fréquentes lors d'entretiens d'embauche avancés sur MongoDB.
MongoDB prend-il en charge les transactions ACID ?
Jusqu'à la version 4.0, MongoDB ne prenait en charge les transactions ACID que pour les documents uniques. Grâce aux transactions ACID multi-documents, les développeurs peuvent désormais garantir les propriétés ACID sur plusieurs documents au sein d'une collection.
Qu'est-ce que le map-reduce dans Mongodb ?
Map-reduce est un paradigme de traitement des données qui effectue des opérations sur de grands ensembles de données et produit des résultats agrégés. MongoDB propose une fonction intégrée d'mapReduce(), composée de deux étapes : map et reduce.
Au cours de la phase de mappage, la fonction traite chaque document de la collection et génère des paires clé-valeur. Ces paires clé-valeur sont agrégées lors de la phase de réduction, et les opérations sont exécutées.
Par exemple, si vous disposez d'une collection de documents texte, la fonction map convertirait chaque mot en une clé et lui attribuerait une valeur de 1. La fonction reduce additionne ensuite les valeurs de chaque clé afin de compter le nombre d'occurrences de chaque mot dans l'ensemble de la collection.
Veuillez expliquer les index TTL dans MongoDB.
Les données générées doivent être régulièrement examinées et supprimées lorsqu'elles ne sont plus nécessaires ; sinon, vous risquez de manquer de ressources pour stocker les informations les plus récentes.
MongoDB propose des index TTL (Time-to-Live) qui simplifient la suppression des documents expirés. Il vous suffit de préciser la durée de conservation d'un document, et TTL le supprimera automatiquement une fois ce délai écoulé.
Le tableau suivant présente les types d'index disponibles dans MongoDB et leurs cas d'utilisation :
|
Type d'index |
Description |
Exemple de cas d'utilisation |
|
Champ unique |
Index sur un seul champ |
Indexation des e-mails pour une recherche plus rapide |
|
Composé |
Index sur plusieurs champs |
Tri par |
|
Texte |
Recherche en texte intégral sur les champs de chaîne |
Recherche d'un article de blog par mots-clés |
|
TTL |
Supprime automatiquement les documents périmés. |
Nettoyage des journaux après un certain temps |
|
Géospatial |
Prend en charge les requêtes basées sur la localisation |
Recherche de restaurants à proximité |
MongoDB offre-t-il des fonctionnalités de sauvegarde et de restauration ?
MongoDB permet la sauvegarde des données via l'utilitaire mongodump. Cet outil permet de créer des sauvegardes binaires de vos données, que vous pouvez importer à tout moment. Une autre option consiste à utiliser des solutions cloud tierces telles qu'u MongoDB Atlas(service cloud) pour automatiser le processus de sauvegarde.
MongoDB fournit l'utilitaire mongorestore pour importer des données à partir de fichiers BSON sauvegardés. De plus, les solutions cloud tierces offrent des capacités de restauration automatisées, ce qui réduit les temps d'arrêt.
Comment optimiser les requêtes MongoDB ?
Voici quelques solutions pouvant être appliquées pour optimiser vos requêtes MongoDB :
- Les index stockent des informations sur les documents, ce qui facilite la recherche rapide des données appropriées. Par conséquent, la création d'index peut améliorer les performances des requêtes.
- Si vous connaissez les colonnes dont vous avez besoin, veuillez utiliser des méthodes de projection afin de ne renvoyer que ces champs pour améliorer les performances.
- Veuillez éviter les opérations coûteuses telles que les expressions régulières ; utilisez plutôt des recherches par préfixe ou des champs indexés.
- Veuillez sélectionner la clé de partition appropriée, en particulier lorsque vous travaillez sur des charges de travail impliquant de nombreuses lectures.
Veuillez expliquer le journalisation dans MongoDB.
Lorsqu'une opération d'écriture est effectuée, MongoDB l'enregistre dans les fichiers journaux avant qu'elle ne soit gravée dans les fichiers de la base de données. Ces journaux garantissent que les opérations d'écriture validées peuvent être rapidement récupérées en cas de défaillance ou de panne du système.
Questions d'entretien sur le codage MongoDB
Les questions d'entretien relatives au codage se concentrent souvent sur votre capacité à mettre en œuvre les concepts MongoDB à travers le code. Ils évaluent votre syntaxe, vos pratiques de codage et votre capacité à utiliser efficacement les outils et les fonctions MongoDB.
Comment créer un index dans MongoDB ?
MongoDB dispose d'une fonction d'createIndex() ation permettant de créer différents types d'index, tels que des index à champ unique, des index textuels et des index 2D. Cette méthode comporte deux paramètres d'entrée : les clés définissant les colonnes à indexer et d'autres options.
Syntaxe :
db.collection.createIndex(keys, options)
- Clés :
{ field1: 1, field2: -1, ... }, 1 pour l'ordre croissant et -1 pour l'ordre décroissant - Options :
{unique: true},{sparse: true},{ expireAfterSeconds: 3600 }
Exemple :
db.users.createIndex({ email: 1 }, { unique: true });
Comment mettre en œuvre l'agrégation dans MongoDB ?
L'agrégation comprend généralement trois étapes : la correspondance, le regroupement et le tri. Voyons comment nous pouvons mettre cela en œuvre dans le code.
Exemple de document « produits » :
[
{ "_id": 1, "product_id": "t2409", "amount": $250, "status": "done" },
{ "_id": 2, "product_id": "t2009", "amount": $300, "status": "done" },
{ "_id": 3, "product_id": "t1309", "amount": $150, "status": "pending" },
{ "_id": 4, "product_id": "t1919", "amount": $480, "status": "done" },
{ "_id": 5, "product_id": "t5459", "amount": $120, "status": "pending" },
{ "_id": 6, "product_id": "t3829", "amount": $280, "status": "done" }
]
$match: Pour filtrer les documents en fonction d'une condition$group: Ceci regroupe les données et effectue une opération d'agrégation.$sort: Veuillez organiser les documents de sortie selon vos besoins.
Exemple :
db.products.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$product_id", totalAmount: { $sum: "$amount" },
{ $sort
]);
Comment exécuter une jointure SQL équivalente dans MongoDB ?
MongoDB fournit des opérateurs d'agrégation tels que $lookup pour effectuer des jointures équivalentes à celles du langage SQL.
Syntax:
db.collection_1_name.aggregate([
{
$lookup: {
from: "collection_2_name", // The other collection to join with
localField: "field_in_collection_1", // The field on which you want to join
foreignField: "field_in_collection_2", // The field from the second collection you want to perform join operation
as: "result_field" // The name of the new field to store the joined result
}
}
])
Exemple :
Supposons que vous disposiez de collections de commandes et de produits contenant les données suivantes :
Collection « Commandes » :
[
{ "_id": 1, "product_id": 101, "order_amount": 250 },
{ "_id": 2, "product_id": 102, "order_amount": 300 },
{ "_id": 3, "product_id": 101, "order_amount": 150 }
]
Collection « Produits » :
[
{ "_id": 3789, "product_id": 102, "product_price": $100},
{ "_id": 3970, "product_id": 103, "product_price": $297},
{ "_id": 3509, "product_id": 101, "product_price": $300},
]
Opération de fusion :
db.orders.aggregate([
{
$lookup: {
from: "products",
localField: "customer_id",
foreignField: "_id",
as: "customer_info"
}
}
])
Comment modélisez-vous une relation un-à-plusieurs dans MongoDB ?
Vous pouvez créer un modèle de données qui utilise des documents intégrés pour décrire une relation un-à-plusieurs. Par exemple, une seule équipe peut compter plusieurs employés. Vous pouvez donc les intégrer comme suit :
Données :
// team details
{
_id: "Datascience"
company_name: "DataCamp"
team_name: "Data leaders"
}
// employee one
{
name: "John"
employee_id: "t009456"
email: johnsmith@datacamp.com
}
// employee two
{
name: "Emily"
employee_id: "t8068ms"
email: emilyjones@datacamp.com
}
Document intégré un-à-plusieurs :
{
"_id": "Datascience",
"company_name": "DataCamp",
"team_name": "Data leaders",
"employees": [
{
"name": "John",
"employee_id": "t009456",
"email": "johnsmith@datacamp.com"
},
{
"name": "Emily",
"employee_id": "t8068ms",
"email": "emilyjones@datacamp.com"
}
]
}
Questions d'entretien basées sur des scénarios MongoDB pour les administrateurs de bases de données
Les recruteurs vous placeront dans des situations difficiles et évalueront la manière dont vous les aborderez. Cela leur permet de mieux appréhender votre capacité à gérer des problèmes en temps réel lorsque vous travaillez avec MongoDB.
Veuillez imaginer que vous effectuez une opération de recherche dans la base de données « commandes » comme suit. Comment pouvez-vous déterminer pourquoi la requête est lente ?
df.orders.find({
customer_id: 'yop89'
ordered_items: {
product_id: 'toi45'
product_id: 'tac87'
}
});
Tout d'abord, il est recommandé de définir le niveau de profilage 1 afin de sélectionner uniquement les requêtes lentes :
db.setProfilingLevel(1, { slowms: 100 }); // Logs queries slower than 100ms
Le code suivant nous fournit des informations supplémentaires telles que le type d'opération, le temps nécessaire et les clés ou documents analysés. Ces informations vous permettent d'identifier les requêtes lentes :
db.system.profile.find({ millis: { $gt: 100 } }).sort({ millis: -1 }).limit(10);
Dans le scénario ci-dessus, comment pourriez-vous améliorer les performances des requêtes lentes ?
À partir du résultat du code ci-dessus, si la requête analyse l'ensemble de la collection, veuillez créer des index sur customer_id et ordered_items. Les index peuvent réduire le nombre de documents analysés, améliorant ainsi le temps d'exécution des requêtes.
db.orders.createIndex({ customer_id: 1, "ordered_items.product_id": 1});
Dans le sharding, si un fragment est surchargé et que les autres restent inactifs. Comment parvenez-vous à équilibrer cela ?
Deux problèmes potentiels pourraient être le choix inapproprié de la clé de partition et la répartition inégale des données entre les partitions.
Solution 1 : Sélectionner la clé de partition appropriée
- Veuillez sélectionner des colonnes à cardinalité élevée comme clés de partition. En d'autres termes, une clé de partition doit comporter de nombreuses valeurs uniques.
- Si votre charge de travail implique de nombreuses écritures, veuillez vous assurer que votre clé de partitionnement ne dirige pas toutes les écritures vers un seul fragment.
- Veuillez sélectionner une clé de partition qui correspond à vos requêtes les plus fréquentes. Par exemple, si vos requêtes se basent souvent sur un champ spécifique, ce champ pourrait constituer une clé de partition efficace.
Solution 2 : Rééquilibrer la répartition inégale
La commande ci-dessous fournit une vue d'ensemble des données réparties entre les fragments. Si les segments ne sont pas correctement répartis, veuillez activer l'équilibreur.
sh.status()
La commande ci-dessous permet d'obtenir l'état de l'équilibreur. Si cette option est désactivée, veuillez utiliser la commande suivante pour l'activer.
sh.getBalancerState()
sh.enableBalancing("db_name.collection_name")
Quels défis pourriez-vous rencontrer lors de la migration d'un SGBDR vers MongoDB ?
Il peut s'avérer difficile de mettre en correspondance les opérations des bases de données relationnelles avec leurs équivalents dans nosql.
- Par exemple, les jointures SQL ne sont pas simples dans MongoDB ; il est nécessaire d'utiliser le cadre d'agrégation pour obtenir une fonctionnalité similaire.
- Un autre défi réside dans le fait que les données stockées dans des tableaux structurés devront être transformées pour s'adapter au format de stockage BSON de MongoDB.
- De plus, alors que les SGBDR offrent une conformité ACID robuste, MongoDB ne propose que des propriétés ACID au niveau des documents, ce qui signifie que les transactions ACID complexes peuvent nécessiter une attention particulière.
Conseils pour se préparer à un entretien d'embauche chez MongoDB
Réussir un entretien chez MongoDB nécessite une compréhension approfondie des concepts et une expertise pratiquedans le domaine. Il est essentiel d'approfondir vos connaissances sur les bases de données nosql, de maîtriser la syntaxe MongoDB, de vous familiariser avec divers scénarios de défaillance MongoDB et d'apprendre à les résoudre.
Voici mes meilleurs conseils pour vous aider à réussir votre prochain entretien chez MongoDB :
- Maîtrisez les principes fondamentaux : Que vous postuliez à un poste de débutant ou à un poste de cadre supérieur, les connaissances fondamentales sont toujours évaluées. Par conséquent, il est important de bien comprendre l'architecture, le type de stockage, la syntaxe et les opérations prises en charge par MongoDB.
- Sujets avancés : Il est important de comprendre le fonctionnement des concepts avancés tels que la réplication, l'agrégation, le partitionnement et l'indexation dans MongoDB et d'être en mesure de les mettre en œuvre si nécessaire.
- Scénarios réels : Les recruteurs évaluent fréquemment votre capacité à gérer les bases de données MongoDB dans divers scénarios professionnels. Par exemple, on pourrait vous demander comment migrer une base de données RDBMS existante vers MongoDB. Dans le cadre d'entretiens plus avancés, il est possible qu'on vous présente un scénario et qu'on vous demande de rédiger un code pour y répondre.
- Veuillez consulter les expériences précédentes : En vous informant sur les expériences d'entretien précédentes au sein de l'entreprise, vous pourrez vous faire une idée du type de questions auxquelles vous pouvez vous attendre et de la manière dont se déroulent les entretiens, ce qui vous permettra de vous préparer en conséquence. Personnellement, je consulte des plateformes telles que Glassdoor, Blind, YouTube et LinkedIn pour obtenir des informations sur les expériences d'entretiens précédents.
- Simulations d'entretiens : Les simulations d'entretiens vous permettent d'évaluer vos points forts et vos points faibles. Ils vous préparent également à l'environnement de l'entretien, ce qui vous aide à vous sentir confiant et à l'aise lors de l'entretien proprement dit.
- Compétences relationnelles : La capacité à communiquer sur des sujets complexes est essentielle pour impressionner le recruteur. Par conséquent, veuillez améliorer vos compétences en communication et en présentation.
- Certifications : Les certifications MongoDB constituent une preuve de votre expertise. Ils approfondissent votre compréhension du sujet et augmentent vos chances d'être recruté. Voici un guide complet pour obtenir une certification MongoDB.
Conclusion
MongoDB est une base de données nosql performante dotée d'un schéma flexible qui prend en charge les applications modernes. À ce titre, son expertise est très recherchée dans le domaine du développement de logiciels.
Dans cet article, nous avons examiné les questions essentielles à poser lors d'un entretien, allant des questions de base aux questions sur le codage et aux questions basées sur des scénarios. De plus, les conseils fournis à la fin augmenteront vos chances de réussite lors des entretiens.
Pour approfondir vos connaissances sur MongoDB, envisagez de suivre des courstels que « MongoDB en Python » et « Concepts nosql ».
Devenez certifié SQL
Srujana est rédactrice technique indépendante et titulaire d'un diplôme de quatre ans en informatique. Écrire sur divers sujets, notamment la science des données, l'informatique en nuage, le développement, la programmation, la sécurité et bien d'autres encore, est pour elle une évidence. Elle aime la littérature classique et la découverte de nouvelles destinations.
