{"id":58977,"date":"2022-06-27T08:04:27","date_gmt":"2022-06-27T07:04:27","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=58977&#038;post_type=knowledgebase&#038;preview_id=58977"},"modified":"2025-10-01T20:46:09","modified_gmt":"2025-10-01T19:46:09","slug":"qu-est-ce-que-mongodb","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/","title":{"rendered":"Qu&rsquo;est-ce que MongoDB ? Tout sur la populaire base de donn\u00e9es open source"},"content":{"rendered":"<p>Ce tutoriel vous pr\u00e9sente la base de donn\u00e9es MongoDB. Vous d\u00e9couvrirez comment installer le logiciel, manipuler les donn\u00e9es et appliquer les techniques de conception de donn\u00e9es \u00e0 vos propres applications.<\/p>\n<p>Tous les exemples ont \u00e9t\u00e9 d\u00e9velopp\u00e9s \u00e0 l&rsquo;aide de MongoDB 5, mais la plupart fonctionneront dans des versions ant\u00e9rieures ou ult\u00e9rieures. Le code peut \u00eatre saisi directement dans une application cliente ou dans le shell MongoDB (mongo ou mongosh) pour interroger et mettre \u00e0 jour la base de donn\u00e9es.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Qu&rsquo;est-ce que MongoDB ?<\/h2>\n<p>MongoDB est une <a href=\"https:\/\/kinsta.com\/fr\/blog\/base-de-donnees-open-source\/\">base de donn\u00e9es NoSQL open source<\/a>. NoSQL signifie que la base de donn\u00e9es n&rsquo;utilise pas de tables relationnelles comme une <a href=\"https:\/\/kinsta.com\/fr\/blog\/mongodb-vs-mysql\/\">base de donn\u00e9es SQL traditionnelle<\/a>.<\/p>\n<p>Il existe une gamme de types de bases de donn\u00e9es NoSQL, mais MongoDB stocke les donn\u00e9es dans des objets de type JavaScript appel\u00e9s <em>documents<\/em>, dont le contenu ressemble \u00e0 ceci :<\/p>\n<pre><code class=\"language-bash\">{\n  _id: \"123\",\n  name: \"Craig\"\n}<\/code><\/pre>\n<p><br \/>\nBien que MongoDB soit devenu synonyme du framework JavaScript <a href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-node-js\/\">Node.js<\/a>, des <a href=\"https:\/\/www.mongodb.com\/docs\/drivers\/\" target=\"_blank\" rel=\"noopener noreferrer\">pilotes de base de donn\u00e9es<\/a> MongoDB officiels sont disponibles pour la plupart des frameworks, langages et moteurs d&rsquo;ex\u00e9cution, notamment <a href=\"https:\/\/www.mongodb.com\/docs\/drivers\/node\/current\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a>, <a href=\"https:\/\/kinsta.com\/fr\/blog\/php-vs-python\/\">PHP et Python<\/a>. Vous pouvez \u00e9galement opter pour des biblioth\u00e8ques telles que <a href=\"https:\/\/www.npmjs.com\/package\/mongoose\" target=\"_blank\" rel=\"noopener noreferrer\">Mongoose<\/a> qui offrent un niveau d&rsquo;abstraction plus \u00e9lev\u00e9 ou des fonctionnalit\u00e9s de mappage objet-relationnel (Object Relational Mapping ou ORM).<\/p>\n<p>Contrairement aux tables SQL, il n&rsquo;y a pas de limites structurelles \u00e0 ce que vous pouvez stocker dans MongoDB. Les sch\u00e9mas de donn\u00e9es ne sont pas impos\u00e9s : Vous pouvez stocker ce que vous voulez o\u00f9 vous voulez. Cela rend MongoDB id\u00e9al pour les structures de donn\u00e9es plus organiques &#8211; <em>ou d\u00e9sordonn\u00e9es<\/em>.<\/p>\n<p>Prenons l&rsquo;exemple d&rsquo;un carnet d&rsquo;adresses de contacts. Les personnes peuvent souvent avoir plusieurs num\u00e9ros de t\u00e9l\u00e9phone. Vous pourriez d\u00e9finir trois champs de t\u00e9l\u00e9phone dans une table SQL, mais ce serait trop pour certains contacts et trop peu pour d&rsquo;autres. En fin de compte, vous aurez besoin d&rsquo;une table de t\u00e9l\u00e9phone s\u00e9par\u00e9e, ce qui ajoute \u00e0 la complexit\u00e9.<\/p>\n<p>Dans MongoDB, ces num\u00e9ros de t\u00e9l\u00e9phone pourraient \u00eatre d\u00e9finis comme un tableau illimit\u00e9 d&rsquo;objets dans le m\u00eame document :<\/p>\n<pre><code class=\"language-bash\">{\n  _id: \"123\",\n  name: \"Craig\",\n  telephone: [\n    { home: \"0123456789\" },\n    { work: \"9876543210\" },\n    { cell: \"3141592654\" }\n  ]\n}<\/code><\/pre>\n<p>Notez que MongoDB utilise une notation d&rsquo;objets JavaScript similaire pour les mises \u00e0 jour et les requ\u00eates de donn\u00e9es, ce qui peut poser quelques difficult\u00e9s si vous \u00eates habitu\u00e9 \u00e0 SQL.<\/p>\n<h2>\u00c9l\u00e9ments de MongoDB<\/h2>\n<p>Avant d&rsquo;aller plus loin, jetons un coup d&rsquo;\u0153il \u00e0 ce qui fait le charme de MongoDB. Nous utiliserons ce vocabulaire tout au long de cet article.<\/p>\n<ul>\n<li><strong>Document :<\/strong> Un objet individuel unique dans un stock de donn\u00e9es, analogue \u00e0 un enregistrement ou une ligne dans une table de base de donn\u00e9es SQL.<\/li>\n<li><strong>Champ :<\/strong> Un \u00e9l\u00e9ment de donn\u00e9es unique dans un document, tel qu&rsquo;un nom ou un num\u00e9ro de t\u00e9l\u00e9phone, analogue \u00e0 un champ ou une colonne de table SQL.<\/li>\n<li><strong>Collection :<\/strong> Un ensemble de documents similaires, analogue \u00e0 une table SQL. Bien que vous puissiez mettre tous vos documents dans une seule collection, il est g\u00e9n\u00e9ralement plus pratique de les regrouper en types sp\u00e9cifiques. Dans un carnet d&rsquo;adresses de contacts, vous pourriez avoir une collection pour les personnes et une collection pour les entreprises.<\/li>\n<li><strong>Base de donn\u00e9es :<\/strong> Une collection de donn\u00e9es li\u00e9es, identique dans sa signification \u00e0 une base de donn\u00e9es SQL.<\/li>\n<li><strong>Sch\u00e9ma :<\/strong> Un sch\u00e9ma d\u00e9finit les structures de donn\u00e9es. Dans les bases de donn\u00e9es SQL, vous devez d\u00e9finir des d\u00e9finitions de table avec des champs et des types associ\u00e9s avant de pouvoir stocker des donn\u00e9es. Ceci n&rsquo;est pas n\u00e9cessaire dans MongoDB bien qu&rsquo;il soit possible de cr\u00e9er un sch\u00e9ma qui valide les documents avant qu&rsquo;ils puissent \u00eatre ajout\u00e9s \u00e0 une collection.<\/li>\n<li><strong>Index :<\/strong> Une structure de donn\u00e9es utilis\u00e9e pour am\u00e9liorer les performances d&rsquo;interrogation, identique dans sa signification aux index SQL.<\/li>\n<li><strong>Cl\u00e9 primaire :<\/strong> Un identifiant unique pour chaque document. MongoDB ajoute automatiquement un champ _id unique et index\u00e9 \u00e0 chaque document d&rsquo;une collection.<\/li>\n<li><strong>D\u00e9normalisation :<\/strong> Dans les bases de donn\u00e9es SQL, la \u00ab normalisation \u00bb est une technique utilis\u00e9e pour organiser les donn\u00e9es et \u00e9liminer les doublons. Dans MongoDB, la \u00ab d\u00e9normalisation \u00bb est encourag\u00e9e. Vous r\u00e9p\u00e9tez activement les donn\u00e9es et un seul document pourrait contenir toutes les informations n\u00e9cessaires.<\/li>\n<li><strong>Joints :<\/strong> SQL fournit un op\u00e9rateur JOIN afin que les donn\u00e9es puissent \u00eatre extraites de plusieurs tables normalis\u00e9es en une seule requ\u00eate. La jointure n&rsquo;\u00e9tait pas possible dans MongoDB jusqu&rsquo;\u00e0 la version 3.6 et des limitations subsistent. C&rsquo;est une autre raison pour laquelle les donn\u00e9es devraient \u00eatre d\u00e9normalis\u00e9es en documents autonomes.<\/li>\n<li><strong>Transactions :<\/strong> Lorsqu&rsquo;une mise \u00e0 jour modifie deux valeurs ou plus sur un m\u00eame document, MongoDB s&rsquo;assure qu&rsquo;elles r\u00e9ussissent toutes ou qu&rsquo;elles \u00e9chouent toutes. Les mises \u00e0 jour sur deux documents ou plus doivent \u00eatre envelopp\u00e9es dans une transaction. MongoDB prend en charge les transactions depuis la version 4.0, mais un ensemble de r\u00e9pliques multi-serveurs ou un cluster sharded est n\u00e9cessaire. Les exemples d&rsquo;installation ci-dessous utilisent un seul serveur, les transactions ne sont donc pas possibles.<\/li>\n<\/ul>\n<h2>Comment installer MongoDB<\/h2>\n<p>Vous avez trois options pour utiliser MongoDB sur votre machine locale. Nous allons vous guider \u00e0 travers chacune d&rsquo;elles.<\/p>\n<h3>1. Utiliser Docker (recommand\u00e9)<\/h3>\n<p><a href=\"https:\/\/www.docker.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Docker<\/a> est un outil de gestion de logiciels qui peut installer, configurer et ex\u00e9cuter MongoDB ou toute autre application en quelques minutes.<\/p>\n<p><a href=\"https:\/\/dockerwebdev.com\/tutorials\/install-docker\/\" target=\"_blank\" rel=\"noopener noreferrer\">Installez Docker et Docker Compose<\/a> puis cr\u00e9ez un dossier de projet avec un seul fichier nomm\u00e9 docker-compose.yml contenant le contenu suivant (notez que les indentations sont essentielles) :<\/p>\n<pre><code class=\"language-bash\">version: '3'\n\nservices:\n\n  mongodb:\n    image: mongo:5\n    environment:\n      - MONGO_INITDB_ROOT_USERNAME=root\n      - MONGO_INITDB_ROOT_PASSWORD=pass\n      - MONGO_INITDB_DATABASE=mongodemo\n    container_name: mongodb\n    volumes:\n      - dbdata:\/data\/db\n    ports:\n      - \"27017:27017\"\n\n  adminer:\n    image: dehy\/adminer\n    container_name: adminer\n    depends_on:\n      - mongodb\n    ports:\n      - \"8080:80\"\n\nvolumes:\n  dbdata:<\/code><\/pre>\n<p>Acc\u00e9dez au dossier \u00e0 partir de la ligne de commande et ex\u00e9cutez :<\/p>\n<pre><code class=\"language-bash\">docker-compose up<\/code><\/pre>\n<p>La derni\u00e8re version de MongoDB 5 sera t\u00e9l\u00e9charg\u00e9e et lanc\u00e9e. Cela prendra quelques minutes lors du premier lancement, mais les ex\u00e9cutions suivantes sont consid\u00e9rablement plus rapides.<\/p>\n<p>Notez que :<\/p>\n<ul>\n<li>Un compte administrateur MongoDB est d\u00e9fini avec l&rsquo;ID \u00ab root \u00bb et le mot de passe \u00ab pass \u00bb.<\/li>\n<li>Les donn\u00e9es sont sauvegard\u00e9es entre les red\u00e9marrages dans un volume Docker nomm\u00e9 dbdata.<\/li>\n<li>Le <a href=\"https:\/\/kinsta.com\/fr\/blog\/adminer\/\">client de base de donn\u00e9es Adminer<\/a> est \u00e9galement fourni.<\/li>\n<\/ul>\n<p>Vous pouvez utiliser n&rsquo;importe quel client de base de donn\u00e9es MongoDB pour vous connecter \u00e0 localhost:27017 en utilisant l&rsquo;identifiant \u00ab root \u00bb et le mot de passe \u00ab pass \u00bb. Sinon, vous pouvez acc\u00e9der \u00e0 Adminer \u00e0 l&rsquo;adresse <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:8080\/<\/a> et vous connecter avec les informations d&rsquo;identification suivantes :<\/p>\n<ul>\n<li><strong>Syst\u00e8me :<\/strong> MongoDB (alpha)<\/li>\n<li><strong>Serveur :<\/strong> host.docker.internal<\/li>\n<li><strong>Nom d&rsquo;utilisateur :<\/strong> root<\/li>\n<li><strong>Mot de passe :<\/strong> pass<\/li>\n<\/ul>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Le serveur host.docker.internal fonctionnera sur les appareils Mac et Windows ex\u00e9cutant Docker Desktop. Les utilisateurs de Linux doivent utiliser l&rsquo;adresse IP du r\u00e9seau de l&rsquo;appareil, et non pas localhost (Adminer r\u00e9sout cela \u00e0 son propre conteneur Docker).<\/p>\n<\/aside>\n\n<figure id=\"attachment_123495\" aria-describedby=\"caption-attachment-123495\" style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-123495 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/adminer-login.png\" alt=\"Connexion \u00e0 Adminer\" width=\"900\" height=\"455\"><figcaption id=\"caption-attachment-123495\" class=\"wp-caption-text\">Connexion \u00e0 Adminer<\/figcaption><\/figure>\n<p>Adminer vous permet d&rsquo;inspecter les collections et les documents. Sachez toutefois que les collections sont appel\u00e9es \u00ab tables \u00bb :<\/p>\n<figure id=\"attachment_123494\" aria-describedby=\"caption-attachment-123494\" style=\"width: 1102px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-123494 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/adminer-view.png\" alt=\"Vue de la collection Adminer\" width=\"1102\" height=\"577\"><figcaption id=\"caption-attachment-123494\" class=\"wp-caption-text\">Vue de la collection Adminer<\/figcaption><\/figure>\n<p>Pour ex\u00e9cuter des commandes, vous pouvez utiliser le shell MongoDB (<code>mongosh<\/code>) ou l&rsquo;environnement REPL (Read Eval Print Loop) de l&rsquo;ancienne ligne de commande <code>mongo<\/code>.<\/p>\n<p>Acc\u00e9dez au shell bash du conteneur Docker MongoDB :<\/p>\n<pre><code class=\"language-bash\">docker exec -it mongodb bash<\/code><\/pre>\n<p>Lancez ensuite le shell MongoDB avec l&rsquo;ID et le mot de passe :<\/p>\n<pre><code class=\"language-bash\">mongosh -u root -p pass<\/code><\/pre>\n<p>(L&rsquo;ancienne commande <code>mongo<\/code> peut \u00eatre utilis\u00e9e si vous pr\u00e9f\u00e9rez)<\/p>\n<p>Vous pouvez ensuite lancer des commandes MongoDB comme les suivantes :<\/p>\n<ul>\n<li><strong><code>show dbs;<\/code><\/strong> &#8211; Afficher toutes les bases de donn\u00e9es<\/li>\n<li><strong><code>use mongodemo;<\/code><\/strong> &#8211; Utiliser une base de donn\u00e9es sp\u00e9cifique<\/li>\n<li><strong><code>show collections;<\/code><\/strong> &#8211; Lister les collections dans une base de donn\u00e9es<\/li>\n<li><strong><code>db.person.find();<\/code><\/strong> &#8211; Lister tous les documents dans une collection<\/li>\n<li><strong><code>exit;<\/code><\/strong> &#8211; Quitter\/fermer le shell<\/li>\n<\/ul>\n<p>Arr\u00eatez MongoDB en ex\u00e9cutant la commande suivante depuis le r\u00e9pertoire du projet :<\/p>\n<pre><code class=\"language-bash\">docker-compose down<\/code><\/pre>\n<h3>2. Utiliser un fournisseur cloud (aucune installation)<\/h3>\n<p>Vous pouvez utiliser une instance MongoDB h\u00e9berg\u00e9e, il n&rsquo;est donc pas n\u00e9cessaire d&rsquo;installer quoi que ce soit localement. Une connexion Internet est indispensable et la vitesse de r\u00e9ponse d\u00e9pendra de l&rsquo;h\u00e9bergeur et de votre bande passante. La plupart des services facturent des frais d&rsquo;utilisation mensuels et\/ou en m\u00e9gaoctets.<\/p>\n<p>L&rsquo;h\u00f4te fournira normalement les d\u00e9tails vous permettant d&rsquo;administrer la base de donn\u00e9es \u00e0 distance \u00e0 l&rsquo;aide du logiciel client MongoDB.<\/p>\n<h3>3. Installer MongoDB localement<\/h3>\n<p>MongoDB peut \u00eatre install\u00e9 et configur\u00e9 sur Linux, Windows ou Mac OS. Deux \u00e9ditions sont disponibles :<\/p>\n<ol>\n<li>Une \u00e9dition commerciale Enterprise<\/li>\n<li>Une \u00e9dition communautaire open source (utilis\u00e9e dans ce tutoriel)<\/li>\n<\/ol>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/installation\/\" target=\"_blank\" rel=\"noopener noreferrer\">page d&rsquo;installation de MongoDB<\/a> fournit des instructions pour les diff\u00e9rents syst\u00e8mes d&rsquo;exploitation. En g\u00e9n\u00e9ral :<\/p>\n<ul>\n<li>Les \u00e9ditions Linux sont install\u00e9es \u00e0 l&rsquo;aide d&rsquo;un gestionnaire de paquets tel que <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-ubuntu\/\" target=\"_blank\" rel=\"noopener noreferrer\">apt sur Ubuntu<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-os-x\/\" target=\"_blank\" rel=\"noopener noreferrer\">Les \u00e9ditions Mac OS sont install\u00e9es \u00e0 l&rsquo;aide de brew<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/tutorial\/install-mongodb-on-windows\/\" target=\"_blank\" rel=\"noopener noreferrer\">Les \u00e9ditions Windows sont install\u00e9es \u00e0 l&rsquo;aide d&rsquo;un programme d&rsquo;installation .msi<\/a><\/li>\n<\/ul>\n<p>Veillez \u00e0 suivre attentivement les instructions pour que votre installation soit r\u00e9ussie !<\/p>\n<h2>Comment acc\u00e9der \u00e0 votre base de donn\u00e9es MongoDB<\/h2>\n<p>Maintenant que votre base de donn\u00e9es MongoDB est install\u00e9e, il est temps d&rsquo;apprendre \u00e0 la g\u00e9rer. Voyons ce que vous devez faire pour acc\u00e9der \u00e0 votre base de donn\u00e9es et travailler avec elle.<\/p>\n<h3>1. Installer un client MongoDB<\/h3>\n<p>Une application client MongoDB est n\u00e9cessaire pour administrer les bases de donn\u00e9es. Si vous utilisez une installation cloud ou locale, nous vous recommandons <a href=\"https:\/\/www.mongodb.com\/docs\/mongodb-shell\/install\/\" target=\"_blank\" rel=\"noopener noreferrer\">d&rsquo;installer le shell MongoDB en ligne de commande mongosh<\/a>.<\/p>\n<p><a href=\"https:\/\/www.adminer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Adminer<\/a> est un client de base de donn\u00e9es bas\u00e9 sur le web qui prend en charge MongoDB, bien qu&rsquo;il soit actuellement limit\u00e9 \u00e0 l&rsquo;inspection des collections. Adminer est t\u00e9l\u00e9chargeable sous forme de script PHP unique, mais il est d\u00e9j\u00e0 configur\u00e9 si vous utilisez <a href=\"https:\/\/docs.google.com\/document\/d\/13hLswY74cFDedN7DoUWbIshf6K7wRI4myCvKcpvNIZ0\/edit#heading=h.jv0yfv8fhy7q\" target=\"_blank\" rel=\"noopener noreferrer\">l&rsquo;installation Docker<\/a> ou si <a href=\"https:\/\/kinsta.com\/fr\/docs\/devkinsta\/base-de-donnees-devkinsta\/gestionnaire-base-de-donnees\/\">DevKinsta est install\u00e9<\/a>.<\/p>\n<p>Une application client GUI offre une meilleure interface pour la mise \u00e0 jour et l&rsquo;inspection des donn\u00e9es. Plusieurs options sont disponibles, notamment le logiciel gratuit et multi-plateformes <a href=\"https:\/\/www.mongodb.com\/products\/compass\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB Compass<\/a>:<\/p>\n<figure id=\"attachment_123493\" aria-describedby=\"caption-attachment-123493\" style=\"width: 1315px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-123493\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/compass.png\" alt=\"MongoDB Compass\" width=\"1315\" height=\"932\"><figcaption id=\"caption-attachment-123493\" class=\"wp-caption-text\">MongoDB Compass<\/figcaption><\/figure>\n<p><a href=\"https:\/\/studio3t.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Studio 3T<\/a>, un autre pr\u00e9tendant \u00e0 l&rsquo;interface graphique, fournit une application commerciale qui offre gratuitement des fonctionnalit\u00e9s limit\u00e9es :<\/p>\n<figure id=\"attachment_123492\" aria-describedby=\"caption-attachment-123492\" style=\"width: 1266px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-123492\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/05\/studio3t.png\" alt=\"Studio 3T\" width=\"1266\" height=\"905\"><figcaption id=\"caption-attachment-123492\" class=\"wp-caption-text\">Studio 3T<\/figcaption><\/figure>\n<p>Vous pouvez acc\u00e9der \u00e0 votre base de donn\u00e9es MongoDB avec l&rsquo;un de ces outils en utilisant l&rsquo;un des \u00e9l\u00e9ments suivants :<\/p>\n<ol>\n<li>Le nom de r\u00e9seau de la machine, l&rsquo;URL ou l&rsquo;adresse IP (<strong>localhost <\/strong>pour une installation locale).<\/li>\n<li>Le port MongoDB (<strong>27017 <\/strong>par d\u00e9faut).<\/li>\n<li>Un <strong>ID <\/strong>utilisateur et un <strong>mot de passe<\/strong>. Un utilisateur root est normalement d\u00e9fini lors de l&rsquo;installation.<\/li>\n<\/ol>\n<h3>2. D\u00e9finir et enregistrer les informations d&rsquo;identification d&rsquo;acc\u00e8s \u00e0 la base de donn\u00e9es<\/h3>\n<p>L&rsquo;administrateur root a un acc\u00e8s illimit\u00e9 \u00e0 toutes les bases de donn\u00e9es. En g\u00e9n\u00e9ral, vous devriez utiliser un utilisateur personnalis\u00e9 avec des privil\u00e8ges sp\u00e9cifiques pour limiter l&rsquo;acc\u00e8s et <a href=\"https:\/\/kinsta.com\/fr\/blog\/securite-wordpress\/\">augmenter la s\u00e9curit\u00e9<\/a>.<\/p>\n<p>Par exemple, la commande suivante cr\u00e9e un utilisateur nomm\u00e9 <strong>myuser <\/strong>avec le mot de passe <strong>mypass <\/strong>qui a un acc\u00e8s en lecture et en \u00e9criture \u00e0 la base de donn\u00e9es <strong>mydb <\/strong>:<\/p>\n<pre><code class=\"language-bash\">use mydb;\n\ndb.createUser({\n  user: \"myuser\",\n  pwd: \"mypass\",\n  roles: [\n    { role: \"readWrite\", db: \"mydb\" }\n  ]\n});<\/code><\/pre>\n<h2>Comment ins\u00e9rer de nouveaux documents dans MongoDB<\/h2>\n<p>Il n&rsquo;est pas n\u00e9cessaire de d\u00e9finir une base de donn\u00e9es ou une collection avant d&rsquo;ins\u00e9rer votre premier document. En utilisant n&rsquo;importe quel client MongoDB, passez simplement \u00e0 une base de donn\u00e9es nomm\u00e9e mongodemo :<\/p>\n<pre><code class=\"language-bash\">use mongodemo;<\/code><\/pre>\n<p>Puis ins\u00e9rez un seul document dans une nouvelle collection de personnes :<\/p>\n<pre><code class=\"language-bash\">db.person.insertOne(\n  {\n    name: 'Abdul',\n    company: 'Alpha Inc',\n    telephone: [\n      { home: '0123456789' },\n      { work: '9876543210' }\n    ]\n  }\n);<\/code><\/pre>\n<p>Visualisez le document en ex\u00e9cutant une requ\u00eate pour retourner tous les r\u00e9sultats de la collection de personnes :<\/p>\n<pre><code class=\"language-bash\">db.person.find({});<\/code><\/pre>\n<p>Le r\u00e9sultat sera quelque chose comme ceci :<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n  name: 'Abdul',\n  company: 'Alpha Inc',\n  telephone: [\n    { home: '0123456789' },\n    { work: '9876543210' }\n  ]\n}<\/code><\/pre>\n<h3>Comment ins\u00e9rer plusieurs documents<\/h3>\n<p>Vous pouvez ins\u00e9rer plusieurs documents dans une collection en passant un tableau \u00e0 <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.insertMany\/\" target=\"_blank\" rel=\"noopener noreferrer\">insertMany()<\/a>. Le code suivant cr\u00e9e des documents de personnes suppl\u00e9mentaires et une nouvelle collection de soci\u00e9t\u00e9s :<\/p>\n<pre><code class=\"language-bash\">db.person.insertMany([\n  {\n    name: 'Brian',\n    company: 'Beta Inc'\n  },\n  {\n    name: 'Claire',\n    company: 'Gamma Inc',\n    telephone: [\n      { cell: '3141592654' }\n    ]\n  },\n  {\n    name: 'Dawn',\n    company: 'Alpha Inc'\n  },\n  {\n    name: 'Esther',\n    company: 'Beta Inc',\n    telephone: [\n      { home: '001122334455' }\n    ]\n  },\n  {\n    name: 'George',\n    company: 'Gamma Inc'\n  },\n  {\n    name: 'Henry',\n    company: 'Alpha Inc',\n    telephone: [\n      { work: '012301230123' },\n      { cell: '161803398875' }\n    ]\n  },\n]);\n\ndb.company.insertMany([\n  {\n    name: 'Alpha Inc',\n    base: 'US'\n  },\n  {\n    name: 'Beta Inc',\n    base: 'US'\n  },\n  {\n    name: 'Gamma Inc',\n    base: 'GB'\n  },\n]);<\/code><\/pre>\n<h3>D&rsquo;o\u00f9 vient le _id ?<\/h3>\n<p>MongoDB attribue automatiquement un _id \u00e0 chaque document d&rsquo;une collection. Il s&rsquo;agit d&rsquo;un ObjectID &#8211; une valeur BSON (Binary Javascript Object Notation) contenant :<\/p>\n<ul>\n<li>L&rsquo;\u00e9poque Unix en secondes au moment de la cr\u00e9ation (4 octets)<\/li>\n<li>Un identifiant de machine\/processus de 5 octets<\/li>\n<li>Un compteur de 3 octets commen\u00e7ant par une valeur al\u00e9atoire<\/li>\n<\/ul>\n<p>C&rsquo;est la cl\u00e9 primaire du document. Cette valeur hexad\u00e9cimale de 24 caract\u00e8res est garantie unique pour tous les documents de la base de donn\u00e9es et ne peut \u00eatre modifi\u00e9e une fois ins\u00e9r\u00e9e.<\/p>\n<p>MongoDB fournit \u00e9galement une <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/ObjectId.getTimestamp\/\" target=\"_blank\" rel=\"noopener noreferrer\">fonction getTimeStamp()<\/a> afin que vous puissiez obtenir la date\/heure de cr\u00e9ation du document sans avoir \u00e0 d\u00e9finir explicitement une valeur. Alternativement, vous pouvez d\u00e9finir votre propre valeur _id unique lors de la cr\u00e9ation d&rsquo;un document.<\/p>\n<h3>D\u00e9normalisation des donn\u00e9es<\/h3>\n<p>Les enregistrements ins\u00e9r\u00e9s ci-dessus d\u00e9finissent la soci\u00e9t\u00e9 de chaque utilisateur comme une cha\u00eene de caract\u00e8res telle que \u00ab Alpha Inc \u00bb. Ceci n&rsquo;est pas recommand\u00e9 dans les bases de donn\u00e9es SQL normalis\u00e9es :<\/p>\n<ul>\n<li>Il est facile de faire une erreur : un utilisateur est affect\u00e9 \u00e0 \u00ab Alpha Inc \u00bb alors qu&rsquo;un autre est \u00ab Alpha Inc \u00bb (caract\u00e8re point suppl\u00e9mentaire). Ils sont trait\u00e9s comme des soci\u00e9t\u00e9s diff\u00e9rentes.<\/li>\n<li>La mise \u00e0 jour d&rsquo;un nom de soci\u00e9t\u00e9 peut signifier la mise \u00e0 jour de nombreux enregistrements.<\/li>\n<\/ul>\n<p>La solution SQL consiste \u00e0 cr\u00e9er une table <em>company <\/em>et \u00e0 associer une soci\u00e9t\u00e9 \u00e0 une personne en utilisant sa cl\u00e9 primaire (probablement un nombre entier). La cl\u00e9 resterait la m\u00eame quels que soient les changements de nom de soci\u00e9t\u00e9 et la base de donn\u00e9es peut appliquer des r\u00e8gles pour garantir l&rsquo;int\u00e9grit\u00e9 des donn\u00e9es.<\/p>\n<p>La d\u00e9normalisation est encourag\u00e9e dans MongoDB. Vous devriez activement r\u00e9p\u00e9ter les donn\u00e9es et un seul document pourrait contenir toutes les informations n\u00e9cessaires. Cela pr\u00e9sente plusieurs avantages :<\/p>\n<ul>\n<li>Les documents sont autonomes et plus faciles \u00e0 lire &#8211; il n&rsquo;est pas n\u00e9cessaire de faire r\u00e9f\u00e9rence \u00e0 d&rsquo;autres collections.<\/li>\n<li>Les performances d&rsquo;\u00e9criture peuvent \u00eatre plus rapides que celles d&rsquo;une base de donn\u00e9es SQL car moins de r\u00e8gles d&rsquo;int\u00e9grit\u00e9 des donn\u00e9es sont appliqu\u00e9es.<\/li>\n<li>Le sharding &#8211; ou la distribution des donn\u00e9es sur plusieurs machines &#8211; devient plus facile car il n&rsquo;est pas n\u00e9cessaire de r\u00e9f\u00e9rencer les donn\u00e9es dans d&rsquo;autres collections.<\/li>\n<\/ul>\n<h2>Requ\u00eates MongoDB simples<\/h2>\n<p>Vous pouvez lister tous les documents d&rsquo;une collection, telle que la personne, en utilisant un find() vide :<\/p>\n<pre><code class=\"language-bash\">db.person.find({})<\/code><\/pre>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/command\/count\/\">m\u00e9thode count()<\/a> renvoie le nombre de documents (dans notre cas, ce nombre sera de 7) :<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).count();<\/code><\/pre>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/update\/sort\/\">m\u00e9thode sort()<\/a> renvoie les documents dans l&rsquo;ordre que vous pr\u00e9f\u00e9rez, par exemple par nom dans l&rsquo;ordre alphab\u00e9tique inverse :<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).sort({ name: -1 });<\/code><\/pre>\n<p>Vous pouvez \u00e9galement limiter le nombre de documents retourn\u00e9s, par exemple trouver les trois premiers noms :<\/p>\n<pre><code class=\"language-bash\">db.person.find({}).sort({ name: 1 }).limit(2);<\/code><\/pre>\n<p>Vous pouvez rechercher des enregistrements sp\u00e9cifiques en d\u00e9finissant une requ\u00eate avec un ou plusieurs champs, par exemple, trouver tous les documents de personnes o\u00f9 le nom est d\u00e9fini comme \u00ab Claire \u00bb :<\/p>\n<pre><code class=\"language-bash\">db.person.find({ name: 'Claire' });<\/code><\/pre>\n<p>Les <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/\">op\u00e9rateurs logiques<\/a> tels que $and, $or, $not, $gt (sup\u00e9rieur \u00e0), $lt (inf\u00e9rieur \u00e0), et $ne (non \u00e9gal), sont \u00e9galement pris en charge, par exemple, localiser tous les documents de personnes o\u00f9 la soci\u00e9t\u00e9 est soit \u00ab Alpha Inc \u00bb soit \u00ab Beta Inc \u00bb :<\/p>\n<pre><code class=\"language-bash\">db.person.find({\n  $or: [\n    { company: 'Alpha Inc' },\n    { company: 'Beta Inc' }\n  ]\n});<\/code><\/pre>\n<p>Dans la base de donn\u00e9es d&rsquo;exemple, le m\u00eame r\u00e9sultat pourrait \u00eatre obtenu avec $nin (pas dans) pour extraire tous les documents o\u00f9 la soci\u00e9t\u00e9 <strong>n&rsquo;est pas<\/strong> \u00ab Gamma Inc \u00bb :<\/p>\n<pre><code class=\"language-bash\">db.person.find({\n  company: { $nin: ['Gamma Inc'] }\n});<\/code><\/pre>\n<p>Un deuxi\u00e8me objet valeur dans la m\u00e9thode find() d\u00e9finit une <em>projection<\/em> qui d\u00e9finit les champs retourn\u00e9s. Dans cet exemple, seul le nom est renvoy\u00e9 (notez que le document _id est toujours renvoy\u00e9, sauf s&rsquo;il est explicitement d\u00e9sactiv\u00e9) :<\/p>\n<pre><code class=\"language-bash\">db.person.find(\n  { name:'Claire' },\n  { _id:0, name:1 }\n);<\/code><\/pre>\n<p>Le r\u00e9sultat :<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Claire\"\n}<\/code><\/pre>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/elemMatch\/\" target=\"_blank\" rel=\"noopener noreferrer\">requ\u00eate $elemMatch<\/a> vous permet de trouver des \u00e9l\u00e9ments dans un tableau, comme tous les documents o\u00f9 le tableau de t\u00e9l\u00e9phone a un num\u00e9ro professionnel. Le m\u00eame $elemMatch peut \u00eatre utilis\u00e9 dans la projection pour montrer uniquement le num\u00e9ro de travail :<\/p>\n<pre><code class=\"language-bash\">db.person.find(\n  {\n    telephone: { $elemMatch: { work: { $exists: true }} }\n  },\n  {\n    _id: 0,\n    name:1,\n    telephone: { $elemMatch: { work: { $exists: true }}}\n  }\n);<\/code><\/pre>\n<p>Le r\u00e9sultat :<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Abdul\",\n  \"telephone\" : [\n    { \"work\" : \"9876543210\" }\n  ]\n},\n{\n  \"name\" : \"Henry\",\n  \"telephone\" : [\n    { \"work\" : \"012301230123\" }\n  ]\n}<\/code><\/pre>\n<h2>Utilisation des curseurs dans MongoDB<\/h2>\n<p>La plupart des pilotes de base de donn\u00e9es permettent de renvoyer les r\u00e9sultats d&rsquo;une requ\u00eate sous forme de tableau ou de structure de donn\u00e9es similaire. Toutefois, si ce tableau contient des milliers de documents, cela peut entra\u00eener des probl\u00e8mes de m\u00e9moire.<\/p>\n<p>Comme la plupart des bases de donn\u00e9es SQL, MongoDB prend en charge le concept de <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/js-cursor\/\" target=\"_blank\" rel=\"noopener noreferrer\">curseurs<\/a>. Les curseurs permettent \u00e0 une application de lire les r\u00e9sultats d&rsquo;une requ\u00eate un par un avant de passer \u00e0 l&rsquo;\u00e9l\u00e9ment suivant ou d&rsquo;abandonner la recherche.<\/p>\n<p>Les curseurs peuvent \u00e9galement \u00eatre utilis\u00e9s \u00e0 partir d&rsquo;un shell MongoDB :<\/p>\n<pre><code class=\"language-bash\">let myCursor = db.person.find( {} );\n\nwhile ( myCursor.hasNext() ) {\n  print(tojson( myCursor.next() ));\n}<\/code><\/pre>\n<h2>Comment cr\u00e9er des index dans MongoDB<\/h2>\n<p>La collection de personnes contient actuellement sept documents. Toute requ\u00eate ne sera donc pas co\u00fbteuse en termes de calcul. Cependant, imaginez que vous avez un million de contacts avec un nom et une adresse e-mail. Les contacts peuvent \u00eatre class\u00e9s par nom mais les adresses e-mail seront dans un ordre apparemment al\u00e9atoire.<\/p>\n<p>Si vous devez rechercher un contact par son adresse e-mail, la base de donn\u00e9es devra chercher jusqu&rsquo;\u00e0 un million d&rsquo;\u00e9l\u00e9ments avant de trouver une correspondance. L&rsquo;ajout d&rsquo;un index sur le champ email cr\u00e9e une \u00ab table \u00bb de recherche o\u00f9 les e-mails sont stock\u00e9s par ordre alphab\u00e9tique. La base de donn\u00e9es peut maintenant utiliser des algorithmes de recherche plus efficaces pour localiser la bonne personne.<\/p>\n<p>Les index deviennent essentiels lorsque le nombre de documents augmente. En g\u00e9n\u00e9ral, vous devriez appliquer un index \u00e0 tout champ qui pourrait \u00eatre r\u00e9f\u00e9renc\u00e9 dans une requ\u00eate. Vous <em>pourriez<\/em> appliquer des index \u00e0 chaque champ, mais sachez que cela ralentirait les mises \u00e0 jour des donn\u00e9es et augmenterait l&rsquo;espace disque requis, car la r\u00e9indexation devient n\u00e9cessaire.<\/p>\n<p>MongoDB offre une gamme de types d&rsquo;index.<\/p>\n<h3>Index \u00e0 champ unique<\/h3>\n<p>La plupart des index seront appliqu\u00e9s \u00e0 des champs uniques, par exemple, indexer le champ <em>name<\/em> par ordre alphab\u00e9tique croissant :<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex({ name: 1 });<\/code><\/pre>\n<p>L&rsquo;utilisation de -1 inverse l&rsquo;ordre. Cela serait peu utile dans notre exemple ici, mais cela pourrait \u00eatre pratique si vous avez un champ date o\u00f9 les \u00e9v\u00e9nements les plus r\u00e9cents ont la priorit\u00e9.<\/p>\n<p>Trois autres index sont utiles dans l&rsquo;exemple de la base de donn\u00e9es mongodemo :<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { company: 1 } );\ndb.company.createIndex( { name: 1 } );\ndb.company.createIndex( { base: 1 } );<\/code><\/pre>\n<h3>Les index compos\u00e9s sur plusieurs champs<\/h3>\n<p>Deux champs ou plus peuvent \u00eatre sp\u00e9cifi\u00e9s dans un index, par exemple<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { name: 1, company: 1 } );<\/code><\/pre>\n<p>Cela peut \u00eatre utile lorsqu&rsquo;un champ est r\u00e9guli\u00e8rement utilis\u00e9 en conjonction avec un autre dans les requ\u00eates de recherche.<\/p>\n<h3>Index \u00e0 cl\u00e9s multiples sur des \u00e9l\u00e9ments de tableau ou d&rsquo;objet<\/h3>\n<p>Les documents peuvent \u00eatre complexes et il est souvent n\u00e9cessaire d&rsquo;indexer des champs plus profonds dans la structure, comme le num\u00e9ro de t\u00e9l\u00e9phone du travail :<\/p>\n<pre><code class=\"language-bash\">db.products.createIndex( { 'telephone.work': 1 } );<\/code><\/pre>\n<h3>Indices wildcard<\/h3>\n<p>Un wildcard peut indexer tous les champs d&rsquo;un document. Ceci est g\u00e9n\u00e9ralement pratique sur des documents plus petits et plus simples qui peuvent \u00eatre interrog\u00e9s de diff\u00e9rentes mani\u00e8res :<\/p>\n<pre><code class=\"language-bash\">db.company.createIndex( { '$**': 1 } );<\/code><\/pre>\n<h3>Index en texte int\u00e9gral<\/h3>\n<p>Un index texte vous permet de cr\u00e9er des requ\u00eates de type moteur de recherche qui peuvent examiner le texte dans tous les champs de la cha\u00eene et l&rsquo;ordonner par pertinence. Vous pouvez limiter l&rsquo;index de texte \u00e0 des champs sp\u00e9cifiques :<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { name: \"text\", company: \"text\" } );<\/code><\/pre>\n<p>&#8230;ou cr\u00e9er un index de texte sur tous les champs de cha\u00eene :<\/p>\n<pre><code class=\"language-bash\">db.person.createIndex( { \"$**\": \"text\" } );<\/code><\/pre>\n<p><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/text-search\/\">L&rsquo;op\u00e9rateur $text<\/a> vous permet d&rsquo;effectuer une recherche dans cet index, par exemple pour trouver tous les documents o\u00f9 \u00ab Gamma \u00bb est r\u00e9f\u00e9renc\u00e9 :<\/p>\n<pre><code class=\"language-bash\">db.person.find({ $text: { $search: 'Gamma' } });<\/code><\/pre>\n<p>Notez que les recherches en texte int\u00e9gral n\u00e9cessitent g\u00e9n\u00e9ralement cinq caract\u00e8res ou plus pour renvoyer des r\u00e9sultats utiles.<\/p>\n<h3>Autres types d&rsquo;index<\/h3>\n<p>MongoDB fournit plusieurs autres types d&rsquo;index sp\u00e9cialis\u00e9s :<\/p>\n<ul>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/index-hashed\/\" target=\"_blank\" rel=\"noopener noreferrer\">hashed index<\/a><\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/2dsphere\/\" target=\"_blank\" rel=\"noopener noreferrer\">index 2d<\/a> &#8211; points sur un plan bidimensionnel<\/li>\n<li><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/core\/2d\/\" target=\"_blank\" rel=\"noopener noreferrer\">index 2dsphere<\/a> &#8211; g\u00e9om\u00e9tries sur une sph\u00e8re semblable \u00e0 la Terre<\/li>\n<\/ul>\n<h2>Comment g\u00e9rer les index de MongoDB<\/h2>\n<p>Les index d\u00e9finis sur une collection peuvent \u00eatre examin\u00e9s avec :<\/p>\n<pre><code class=\"language-bash\">db.person.getIndexes();<\/code><\/pre>\n<p>Ceci renvoie un tableau de r\u00e9sultats tels que :<\/p>\n<pre><code class=\"language-bash\">[\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"_id\" : 1.0 },\n    \"name\" : \"_id_\"\n  },\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"company\" : 1.0 },\n    \"name\" : \"company_1\"\n  },\n  {\n    \"v\" : 2.0,\n    \"key\" : { \"name\" : 1.0 },\n    \"name\" : \"name_1\"\n  }\n]<\/code><\/pre>\n<p>La \u00ab cl\u00e9 \u00bb d\u00e9finit le champ et l&rsquo;ordre tandis que le \u00ab name \u00bb est un identifiant unique pour cet index &#8211; tel que \u00ab company_1 \u00bb pour l&rsquo;index sur le champ company.<\/p>\n<p>L&rsquo;efficacit\u00e9 d&rsquo;un index peut \u00eatre examin\u00e9e en ajoutant une <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.explain\/\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9thode .explain()<\/a> \u00e0 n&rsquo;importe quelle requ\u00eate, par exemple<\/p>\n<pre><code class=\"language-bash\">db.person.find({ name:'Claire' }).explain();<\/code><\/pre>\n<p>Cette requ\u00eate renvoie un grand ensemble de donn\u00e9es, mais l&rsquo;objet \u00ab winningPlan \u00bb indique le \u00ab indexName \u00bb utilis\u00e9 dans la requ\u00eate :<\/p>\n<pre><code class=\"language-bash\">\"winningPlan\" : {\n  \"stage\" : \"FETCH\",\n  \"inputStage\" : {\n    \"stage\" : \"IXSCAN\",\n    \"keyPattern\" : { \"name\" : 1.0 },\n    \"indexName\" : \"name_1\",\n  }\n}<\/code><\/pre>\n<p>Si n\u00e9cessaire, vous pouvez supprimer un index en faisant r\u00e9f\u00e9rence \u00e0 son nom :<\/p>\n<pre><code class=\"language-bash\">db.person.dropIndex( 'name_1' );<\/code><\/pre>\n<p>ou en utilisant le document de sp\u00e9cification de l&rsquo;index :<\/p>\n<pre><code class=\"language-bash\">db.person.dropIndex({ name: 1 });<\/code><\/pre>\n<p>La <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.collection.dropIndexes\/\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9thode dropIndexes()<\/a> vous permet de supprimer plus d&rsquo;un index en une seule commande.<\/p>\n<h2>Utilisation des sch\u00e9mas de d\u00e9finition de donn\u00e9es de MongoDB<\/h2>\n<p>Contrairement \u00e0 SQL, les sch\u00e9mas de d\u00e9finition des donn\u00e9es ne sont pas n\u00e9cessaires dans MongoDB. Vous pouvez enregistrer n&rsquo;importe quelle donn\u00e9e dans n&rsquo;importe quel document de n&rsquo;importe quelle collection \u00e0 tout moment.<\/p>\n<p>Cela offre une libert\u00e9 consid\u00e9rable. Toutefois, il peut arriver que vous souhaitiez insister pour que des r\u00e8gles soient respect\u00e9es. Par exemple, il ne devrait pas \u00eatre possible d&rsquo;ins\u00e9rer un document dans la collection personne \u00e0 moins qu&rsquo;il ne contienne un nom.<\/p>\n<p>Les r\u00e8gles de validation peuvent \u00eatre sp\u00e9cifi\u00e9es \u00e0 l&rsquo;aide d&rsquo;un <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/query\/jsonSchema\/\" target=\"_blank\" rel=\"noopener noreferrer\">objet $jsonSchema<\/a> qui d\u00e9finit un tableau d&rsquo;\u00e9l\u00e9ments requis et les propri\u00e9t\u00e9s de chaque champ valid\u00e9. La collection de personnes a d\u00e9j\u00e0 \u00e9t\u00e9 cr\u00e9\u00e9e, mais vous pouvez encore d\u00e9finir un sch\u00e9ma qui sp\u00e9cifie qu&rsquo;une cha\u00eene de nom est requise :<\/p>\n<pre><code class=\"language-bash\">db.runCommand({\n  collMod: 'person',\n  validator: {\n    $jsonSchema: {\n      required: [ 'name' ],\n      properties: {\n        name: {\n          bsonType: 'string',\n          description: 'name string required'\n        }\n      }\n    }\n  }\n});<\/code><\/pre>\n<p>Essayez d&rsquo;ins\u00e9rer un document de personne sans nom :<\/p>\n<pre><code class=\"language-bash\">db.person.insertOne({ company: 'Alpha Inc' });<\/code><\/pre>\n<p>&#8230;et la commande \u00e9chouera :<\/p>\n<pre><code class=\"language-bash\">{\n  \"index\" : 0.0,\n  \"code\" : 121.0,\n  \"errmsg\" : \"Document failed validation\",\n  \"op\" : {\n      \"_id\" : ObjectId(\"624591771658cd08f8290401\"),\n      \"company\" : \"Alpha Inc\"\n  }\n}<\/code><\/pre>\n<p>Les sch\u00e9mas peuvent \u00e9galement \u00eatre d\u00e9finis si vous <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/db.createCollection\/\" target=\"_blank\" rel=\"noopener noreferrer\">cr\u00e9ez une collection<\/a> avant qu&rsquo;elle ne soit utilis\u00e9e. La commande suivante met en \u0153uvre les m\u00eames r\u00e8gles que ci-dessus :<\/p>\n<pre><code class=\"language-bash\">db.createCollection('person', {\n  validator: {\n    $jsonSchema: {\n        required: [ 'name' ],\n        properties: {\n          name: {\n          bsonType: 'string',\n          description: 'name string required'\n          }\n      }\n    }\n  }\n});<\/code><\/pre>\n<p>Cet exemple plus complexe cr\u00e9e une collection d&rsquo;utilisateurs qui valide qu&rsquo;un nom, une adresse e-mail et au moins un num\u00e9ro de t\u00e9l\u00e9phone doivent \u00eatre fournis :<\/p>\n<pre><code class=\"language-bash\">db.createCollection('users', {\n  validator: {\n    $jsonSchema: {\n      required: [ 'name', 'email', 'telephone' ],\n      properties: {\n        name: {\n          bsonType: 'string',\n          description: 'name string required'\n          },\n          email: {\n        bsonType: 'string',\n          pattern: '^.+@.+$',\n          description: 'valid email required'\n          },\n        telephone: {\n          bsonType: 'array',\n          minItems: 1,\n          description: 'at least one telephone number required'\n          }\n      }\n    }\n  }\n});<\/code><\/pre>\n<h2>Comment mettre \u00e0 jour des documents existants dans MongoDB<\/h2>\n<p>MongoDB propose plusieurs <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/update-methods\/\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9thodes de mise \u00e0 jour<\/a>, notamment <code>updateOne()<\/code>, <code>updateMany()<\/code>, et <code>replaceOne()<\/code>. Celles-ci sont transmises :<\/p>\n<ul>\n<li>Un objet filtre qui localise les documents \u00e0 mettre \u00e0 jour<\/li>\n<li>Un objet de mise \u00e0 jour &#8211; ou un tableau d&rsquo;objets de mise \u00e0 jour &#8211; d\u00e9crivant les donn\u00e9es \u00e0 modifier<\/li>\n<li>Un objet optionnel d&rsquo;options. La propri\u00e9t\u00e9 la plus utile est upsert qui permet d&rsquo;ins\u00e9rer un nouveau document si aucun n&rsquo;est trouv\u00e9.<\/li>\n<\/ul>\n<p>L&rsquo;exemple suivant met \u00e0 jour le document de la personne dont le nom est d\u00e9fini comme \u00ab Henry \u00bb. Il supprime le num\u00e9ro de t\u00e9l\u00e9phone au travail, ajoute un num\u00e9ro de t\u00e9l\u00e9phone au domicile et d\u00e9finit une nouvelle date de naissance :<\/p>\n<pre><code class=\"language-bash\">db.person.updateOne(\n  { name: 'Henry' },\n  [\n    { $unset: [ 'telephone.work' ] },\n    { $set: {\n      'birthdate': new ISODate('1980-01-01'),\n      'telephone': [ { 'home': '789789789' } ]\n    } }\n  ]\n);<\/code><\/pre>\n<p>L&rsquo;exemple suivant met \u00e0 jour le document de la personne dont le nom est \u00ab Ian \u00bb. Ce nom n&rsquo;existe pas actuellement, mais le fait de d\u00e9finir upsert sur \u00ab true \u00bb le cr\u00e9e :<\/p>\n<pre><code class=\"language-bash\">db.person.updateOne(\n  { name: 'Ian' },\n  { $set: { company: 'Beta Inc' } },\n  { upsert: true }\n);<\/code><\/pre>\n<p>Vous pouvez ex\u00e9cuter des commandes de requ\u00eate pour examiner les mises \u00e0 jour des donn\u00e9es \u00e0 tout moment.<\/p>\n<h2>Comment supprimer des documents dans MongoDB<\/h2>\n<p>L&rsquo;exemple de mise \u00e0 jour ci-dessus a utilis\u00e9 $unset pour supprimer le num\u00e9ro de t\u00e9l\u00e9phone du travail du document portant le nom \u00ab Henry \u00bb. Pour supprimer un document entier, vous pouvez utiliser l&rsquo;une des <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/delete-methods\/\" target=\"_blank\" rel=\"noopener noreferrer\">m\u00e9thodes de suppression<\/a> suivantes : <code>deleteOne()<\/code>, <code>deleteMany()<\/code>, et <code>remove()<\/code> (qui peuvent en supprimer un ou plusieurs).<\/p>\n<p>Le document nouvellement cr\u00e9\u00e9 pour Ian peut \u00eatre supprim\u00e9 avec un filtre appropri\u00e9 :<\/p>\n<pre><code class=\"language-bash\">db.person.deleteOne({ name: 'Ian' });<\/code><\/pre>\n<h2>Utilisation des op\u00e9rations d&rsquo;agr\u00e9gation dans MongoDB<\/h2>\n<p><a href=\"https:\/\/www.mongodb.com\/docs\/manual\/aggregation\/\">L&rsquo;agr\u00e9gation<\/a> est puissante mais peut \u00eatre difficile \u00e0 comprendre. Elle d\u00e9finit une s\u00e9rie &#8211; ou <em>pipeline<\/em> &#8211; d&rsquo;op\u00e9rations dans un tableau. Chaque \u00e9tape de ce pipeline <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/meta\/aggregation-quick-reference\/\" target=\"_blank\" rel=\"noopener noreferrer\">effectue une op\u00e9ration<\/a> telle que le filtrage, le regroupement, le calcul ou la modification d&rsquo;un ensemble de documents. Une \u00e9tape peut \u00e9galement utiliser un comportement similaire \u00e0 celui d&rsquo;un JOIN SQL avec une <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/lookup\/\" target=\"_blank\" rel=\"noopener noreferrer\">op\u00e9ration $lookup<\/a>. Les documents r\u00e9sultants sont transmis \u00e0 l&rsquo;\u00e9tape suivante du pipeline pour un traitement suppl\u00e9mentaire si n\u00e9cessaire.<\/p>\n<p>L&rsquo;agr\u00e9gation est mieux illustr\u00e9e par un exemple. Nous allons construire \u00e9tape par \u00e9tape une requ\u00eate qui renvoie le nom, la soci\u00e9t\u00e9 et le num\u00e9ro de t\u00e9l\u00e9phone professionnel (si disponible) de toute personne qui travaille pour une organisation bas\u00e9e aux \u00c9tats-Unis.<\/p>\n<p>La premi\u00e8re op\u00e9ration ex\u00e9cute un $match pour filtrer les entreprises bas\u00e9es aux \u00c9tats-Unis :<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } }\n]);<\/code><\/pre>\n<p>Ceci renvoie :<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853b\"),\n  \"name\" : \"Alpha Inc\",\n  \"base\" : \"US\"\n}\n{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853c\"),\n  \"name\" : \"Beta Inc\",\n  \"base\" : \"US\"\n}<\/code><\/pre>\n<p>Nous pouvons ensuite ajouter un nouvel op\u00e9rateur pipeline $lookup qui fait correspondre le nom de la soci\u00e9t\u00e9 (localField) \u00e0 la soci\u00e9t\u00e9 (foreignField) dans la collection person (from). Le r\u00e9sultat sera ajout\u00e9 sous forme de tableau d&#8217;employ\u00e9s au document de chaque entreprise :<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: {\n      from: 'person',\n      localField: 'name',\n      foreignField: 'company',\n            as: 'employee'\n          }\n        }\n]);<\/code><\/pre>\n<p>Et voici le r\u00e9sultat :<\/p>\n<pre><code class=\"language-bash\">{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853b\"),\n  \"name\" : \"Alpha Inc\",\n  \"base\" : \"US\",\n  \"employee\" : [\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n      \"name\" : \"Abdul\",\n      \"company\" : \"Alpha Inc\",\n      \"telephone\" : [\n        { \"home\" : \"0123456789\" },\n        { \"work\" : \"9876543210\" }\n      ]\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8537\"),\n      \"name\" : \"Dawn\",\n      \"company\" : \"Alpha Inc\"\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b853a\"),\n      \"name\" : \"Henry\",\n      \"company\" : \"Alpha Inc\",\n      \"telephone\" : [\n        { \"home\" : \"789789789\" }\n      ],\n    }\n  ]\n}\n{\n  \"_id\" : ObjectId(\"62442429854636a03f6b853c\"),\n  \"name\" : \"Beta Inc\",\n  \"base\" : \"US\",\n  \"employee\" : [\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8535\"),\n      \"name\" : \"Brian\",\n      \"company\" : \"Beta Inc\"\n    },\n    {\n      \"_id\" : ObjectId(\"62442429854636a03f6b8538\"),\n      \"name\" : \"Esther\",\n      \"company\" : \"Beta Inc\",\n      \"telephone\" : [\n       { \"home\" : \"001122334455\" }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n<p>Une <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/project\/#mongodb-pipeline-pipe.-project\" target=\"_blank\" rel=\"noopener noreferrer\">op\u00e9ration $project (projection)<\/a> peut maintenant supprimer tous les tableaux sauf celui des employ\u00e9s. Cette op\u00e9ration est suivie d&rsquo;une <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/unwind\/#mongodb-pipeline-pipe.-unwind\" target=\"_blank\" rel=\"noopener noreferrer\">op\u00e9ration $unwind<\/a> pour d\u00e9structurer le tableau et obtenir des documents s\u00e9par\u00e9s sur les employ\u00e9s :<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: { from: 'person', localField: 'name', foreignField: 'company', as: 'employee' } },\n  { $project: { _id: 0, employee: 1 } },\n  { $unwind: '$employee' }\n]);<\/code><\/pre>\n<p>Le r\u00e9sultat :<\/p>\n<pre><code class=\"language-bash\">{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8534\"),\n    \"name\" : \"Abdul\",\n    \"company\" : \"Alpha Inc\",\n    \"telephone\" : [\n      { \"home\" : \"0123456789\" },\n      { \"work\" : \"9876543210\" }\n    ]\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8537\"),\n    \"name\" : \"Dawn\",\n    \"company\" : \"Alpha Inc\"\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b853a\"),\n    \"name\" : \"Henry\",\n    \"company\" : \"Alpha Inc\",\n    \"telephone\" : [\n      { \"home\" : \"789789789\" }\n    ]\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8535\"),\n    \"name\" : \"Brian\",\n    \"company\" : \"Beta Inc\"\n  }\n}\n{\n  \"employee\" : {\n    \"_id\" : ObjectId(\"62442429854636a03f6b8538\"),\n    \"name\" : \"Esther\",\n    \"company\" : \"Beta Inc\",\n    \"telephone\" : [\n      { \"home\" : \"001122334455\" }\n    ]\n  }\n}<\/code><\/pre>\n<p>Enfin, une <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/replaceRoot\/#mongodb-pipeline-pipe.-replaceRoot\" target=\"_blank\" rel=\"noopener noreferrer\">op\u00e9ration $replaceRoot<\/a> est utilis\u00e9e pour formater chaque document de sorte que seuls le nom de la personne, sa soci\u00e9t\u00e9 et son num\u00e9ro de t\u00e9l\u00e9phone au travail soient renvoy\u00e9s. Cette op\u00e9ration est suivie d&rsquo;une op\u00e9ration <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/operator\/aggregation\/sort\/#mongodb-pipeline-pipe.-sort\" target=\"_blank\" rel=\"noopener noreferrer\">$sort<\/a> pour sortir les documents dans l&rsquo;ordre croissant des noms. La requ\u00eate agr\u00e9g\u00e9e compl\u00e8te :<\/p>\n<pre><code class=\"language-bash\">db.company.aggregate([\n  { $match: { base: 'US' } },\n  { $lookup: { from: 'person', localField: 'name', foreignField: 'company', as: 'employee' } },\n  { $project: { _id: 0, employee: 1 } },\n  { $unwind: '$employee' },\n  { $replaceRoot: {\n    newRoot: {\n      $mergeObjects: [ {\n        name: \"$employee.name\",\n        company: '$employee.company',\n        work: { $first: '$employee.telephone.work' }\n      }, \"$name\" ]\n   } } },\n  { $sort: { name: 1 } }\n]);<\/code><\/pre>\n<p>Le r\u00e9sultat :<\/p>\n<pre><code class=\"language-bash\">{\n  \"name\" : \"Abdul\",\n  \"company\" : \"Alpha Inc\",\n  \"work\" : \"9876543210\"\n}\n{\n  \"name\" : \"Brian\",\n  \"company\" : \"Beta Inc\",\n}\n{\n  \"name\" : \"Dawn\",\n  \"company\" : \"Alpha Inc\",\n}\n{\n  \"name\" : \"Esther\",\n  \"company\" : \"Beta Inc\"\n}\n{\n  \"name\" : \"Henry\",\n  \"company\" : \"Alpha Inc\"\n}<\/code><\/pre>\n<p>Il existe d&rsquo;autres fa\u00e7ons d&rsquo;obtenir ce r\u00e9sultat, mais le point essentiel est que MongoDB peut faire le gros du travail. Il est rarement n\u00e9cessaire de lire les documents et de manipuler les donn\u00e9es directement dans le code de votre application.<\/p>\n<h2>Comment ex\u00e9cuter des op\u00e9rations MongoDB group\u00e9e<\/h2>\n<p>Par d\u00e9faut, MongoDB peut g\u00e9rer 1 000 op\u00e9rations simultan\u00e9es. Il est peu probable que cela pose un probl\u00e8me lorsque vous utilisez MongoDB, mais les applications peuvent atteindre cette limite si elles effectuent une s\u00e9rie de manipulations de donn\u00e9es sur des enregistrements individuels. Les applications Node.js sont particuli\u00e8rement probl\u00e9matiques car elles peuvent rapidement \u00e9mettre une s\u00e9rie de requ\u00eates asynchrones sans avoir \u00e0 attendre qu&rsquo;elles soient termin\u00e9es.<\/p>\n<p>Pour contourner ce probl\u00e8me, MongoDB fournit une <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/reference\/method\/js-bulk\/\" target=\"_blank\" rel=\"noopener noreferrer\">API d&rsquo;op\u00e9rations group\u00e9es<\/a>\u00a0qui accepte un nombre quelconque de mises \u00e0 jour qui peuvent \u00eatre ex\u00e9cut\u00e9es dans l&rsquo;ordre ou dans n&rsquo;importe quel ordre.<\/p>\n<p>Voici un exemple en pseudocode dans Node.js :<\/p>\n<pre><code class=\"language-bash\">\/\/ reference the mycollection collection\nconst bulk = db.collection('mycollection').initializeUnorderedBulkOp();\n\n\/\/ make any number of data changes\nbulk.insertOne(...);\nbulk.insertMany(...)\nbulk.updateOne(...);\nbulk.deleteOne(...);\n\/\/ etc...\n\nbulk.execute();<\/code><\/pre>\n<p>La derni\u00e8re instruction \u00e9met effectivement une seule requ\u00eate MongoDB, vous avez donc moins de chance d&rsquo;atteindre la limite des 1 000 op\u00e9rations.<br \/>\n<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>MongoDB fournit un stockage flexible pour les applications telles que les syst\u00e8mes de gestion de contenu, les carnets d&rsquo;adresses et les r\u00e9seaux sociaux o\u00f9 les structures de donn\u00e9es strictes sont trop rigides et difficiles \u00e0 d\u00e9finir. Les \u00e9critures de donn\u00e9es sont rapides et le sharding sur plusieurs serveurs devient plus facile.<\/p>\n<p>L&rsquo;\u00e9criture d&rsquo;applications utilisant une base de donn\u00e9es MongoDB peut \u00e9galement \u00eatre lib\u00e9ratrice. Il est possible de stocker n&rsquo;importe quelle donn\u00e9e dans n&rsquo;importe quel document de n&rsquo;importe quelle collection \u00e0 tout moment. Ceci est particuli\u00e8rement pratique lorsque vous d\u00e9veloppez un prototype ou un produit minimum viable \u00e0 l&rsquo;aide de m\u00e9thodologies agiles o\u00f9 les exigences \u00e9voluent au fil du temps.<\/p>\n<p>Cela dit, les requ\u00eates complexes peuvent \u00eatre un d\u00e9fi et les concepts de d\u00e9normalisation sont difficiles \u00e0 accepter lorsque vous migrez depuis le monde SQL.<\/p>\n<p>MongoDB est moins adapt\u00e9 aux applications qui ont des exigences transactionnelles strictes o\u00f9 l&rsquo;int\u00e9grit\u00e9 des donn\u00e9es est essentielle, comme dans le cas des syst\u00e8mes bancaires, comptables et de contr\u00f4le des stocks. Ceux-ci ont des champs de donn\u00e9es identifiables qui doivent \u00eatre con\u00e7us avant de commencer le codage.<\/p>\n<p>Il existe de nombreux types d&rsquo;applications entre ces deux extr\u00eames, si bien que le choix d&rsquo;une base de donn\u00e9es appropri\u00e9e devient plus difficile. Heureusement, les bases de donn\u00e9es NoSQL, dont MongoDB, ont commenc\u00e9 \u00e0 adopter des options de type SQL, notamment les JOIN et les transactions.<\/p>\n<p>\u00c0 l&rsquo;inverse, les bases de donn\u00e9es SQL telles que MySQL et PostgreSQL offrent d\u00e9sormais des champs de donn\u00e9es JSON de type NoSQL. Elles aussi peuvent m\u00e9riter votre attention, mais comme toujours, le choix final vous appartient.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce tutoriel vous pr\u00e9sente la base de donn\u00e9es MongoDB. Vous d\u00e9couvrirez comment installer le logiciel, manipuler les donn\u00e9es et appliquer les techniques de conception de donn\u00e9es &#8230;<\/p>\n","protected":false},"author":188,"featured_media":59067,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[373,453,449,746,763],"topic":[950,1020],"class_list":["post-58977","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-database-management-tool","tag-development","tag-mongodb","tag-nosql","topic-adminer","topic-outils-developpement-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Qu&#039;est-ce que MongoDB? Tout sur la populaire base de donn\u00e9es open source<\/title>\n<meta name=\"description\" content=\"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Qu&#039;est-ce que MongoDB ? Tout sur la populaire base de donn\u00e9es open source\" \/>\n<meta property=\"og:description\" content=\"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-27T07:04:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:46:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Craig Buckler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@craigbuckler\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Craig Buckler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\"},\"author\":{\"name\":\"Craig Buckler\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/715d986404b06691ab3014e06596908e\"},\"headline\":\"Qu&rsquo;est-ce que MongoDB ? Tout sur la populaire base de donn\u00e9es open source\",\"datePublished\":\"2022-06-27T07:04:27+00:00\",\"dateModified\":\"2025-10-01T19:46:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\"},\"wordCount\":4903,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg\",\"keywords\":[\"database\",\"database management tool\",\"development\",\"MongoDB\",\"NoSQL\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\",\"name\":\"Qu'est-ce que MongoDB? Tout sur la populaire base de donn\u00e9es open source\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg\",\"datePublished\":\"2022-06-27T07:04:27+00:00\",\"dateModified\":\"2025-10-01T19:46:09+00:00\",\"description\":\"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Qu'est-ce que MongoDB? Tout sur la populaire base de donn\u00e9es open source\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Outils de d\u00e9veloppement web\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/outils-developpement-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Qu&rsquo;est-ce que MongoDB ? Tout sur la populaire base de donn\u00e9es open source\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/715d986404b06691ab3014e06596908e\",\"name\":\"Craig Buckler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"caption\":\"Craig Buckler\"},\"description\":\"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.\",\"sameAs\":[\"https:\/\/craigbuckler.com\/\",\"https:\/\/www.linkedin.com\/in\/craigbuckler\",\"https:\/\/x.com\/craigbuckler\",\"https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ\"],\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/craigbuckler\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Qu'est-ce que MongoDB? Tout sur la populaire base de donn\u00e9es open source","description":"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/","og_locale":"fr_FR","og_type":"article","og_title":"Qu'est-ce que MongoDB ? Tout sur la populaire base de donn\u00e9es open source","og_description":"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.","og_url":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2022-06-27T07:04:27+00:00","article_modified_time":"2025-10-01T19:46:09+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg","type":"image\/jpeg"}],"author":"Craig Buckler","twitter_card":"summary_large_image","twitter_description":"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg","twitter_creator":"@craigbuckler","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Craig Buckler","Dur\u00e9e de lecture estim\u00e9e":"24 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/"},"author":{"name":"Craig Buckler","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/715d986404b06691ab3014e06596908e"},"headline":"Qu&rsquo;est-ce que MongoDB ? Tout sur la populaire base de donn\u00e9es open source","datePublished":"2022-06-27T07:04:27+00:00","dateModified":"2025-10-01T19:46:09+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/"},"wordCount":4903,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg","keywords":["database","database management tool","development","MongoDB","NoSQL"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/","url":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/","name":"Qu'est-ce que MongoDB? Tout sur la populaire base de donn\u00e9es open source","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg","datePublished":"2022-06-27T07:04:27+00:00","dateModified":"2025-10-01T19:46:09+00:00","description":"Les solutions de base de donn\u00e9es open source ouvert font fureur. Dans ce guide, nous examinons MongoDB et vous aidons \u00e0 d\u00e9cider si elle convient \u00e0 votre projet.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2022\/06\/qu-est-ce-que-mongodb.jpeg","width":1460,"height":730,"caption":"Qu'est-ce que MongoDB? Tout sur la populaire base de donn\u00e9es open source"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/qu-est-ce-que-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Outils de d\u00e9veloppement web","item":"https:\/\/kinsta.com\/fr\/sujets\/outils-developpement-web\/"},{"@type":"ListItem","position":3,"name":"Qu&rsquo;est-ce que MongoDB ? Tout sur la populaire base de donn\u00e9es open source"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/715d986404b06691ab3014e06596908e","name":"Craig Buckler","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","caption":"Craig Buckler"},"description":"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.","sameAs":["https:\/\/craigbuckler.com\/","https:\/\/www.linkedin.com\/in\/craigbuckler","https:\/\/x.com\/craigbuckler","https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ"],"url":"https:\/\/kinsta.com\/fr\/blog\/author\/craigbuckler\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/58977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=58977"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/58977\/revisions"}],"predecessor-version":[{"id":80814,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/58977\/revisions\/80814"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/58977\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/58977\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/58977\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/58977\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/58977\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/58977\/translations\/es"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/58977\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/59067"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=58977"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=58977"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=58977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}