Livres blancs Webinars

Afin de vous faire découvrir MongoDB, je vous propose une série d’articles. Après le tutoriel « MongoDB : examiner les fonctionnalités de requêtage« , nous aborderons aujourd’hui les fonctions d’insertion, de suppression et d’update.

Replay

Data / IA : nos experts décryptent les 7 sujets chauds pour 2024

Lire la suite

Insérer des documents dans MongoDB

On va commencer par insérer un document grâce à la fonction insertOne().

Tutoriel MongoDB 2 - insert One 1

Quand on regarde la collection, on peut constater que MongoDB, a bien inséré le document. Il a créé également une clé, nommée id

Tutoriel MongoDB 2 - insert One 2

Si l’on refait la même insertion, on obtient le résultat suivant:

Tutoriel MongoDB 2 - double-insert

MongoDB a inséré un deuxième document. Le système n’a pas détecté de doublon: il a généré une clé différente pour les deux enregistrements.

On peut décider de prendre la main et de décider nous même de la clé id.

Tutoriel MongoDB 2 - insert-withkey

Si j’insère un document avec le même id, cela génère une erreur car la clé n’est plus unique.

Tutoriel MongoDB 2 - error-insert

Je peux également insérer un document avec une structure différente dans la même collection sans que cela ne pose de problème. (Par exemple avec un champ âge supplémentaire).

Tutoriel MongoDB 2 - nosql

MongoDB fait partie de la grande famille des bases NoSQL. Nous n’avons pas eu besoin de déclarer de structure pour notre collection avant d’insérer des documents. Cette souplesse permet à MongoDB de s’adapter très facilement aux évolutions d’applications.

Il est possible d’insérer plusieurs documents en même temps. On va passer en argument un tableau de documents à la fonction insert().

Tutoriel MongoDB 2 - insertMany

Supprimer des documents dans MongoDB

Pour supprimer une collection, on utilise la fonction drop().
On peut vérifier ensuite que la collection ne contient plus aucun document.

Tutoriel MongoDB 2 - drop

Si on ne souhaite pas supprimer la collection mais uniquement certains documents, on va utiliser la fonction deleteOne() ou deleteMany().

Comment choisir les documents à supprimer ? Par une condition que l’on va passer comme argument de notre requête. Nous allons peupler de nouveau notre collection test.

Tutoriel MongoDB 2 - insert-total

Voilà les documents présents :

Tutoriel MongoDB 2 - find-total

Imaginons que je veuille sélectionner le deuxième document portant le nom stephane.
Je commence par faire une requête pour sélectionner le document qui m’intéresse. Une fois la condition validée, je peux remplacer la fonction find() par la fonction deleteOne().

Tutoriel MongoDB 2 - deleteOne

Mettre à jour des documents dans MongoDB

MongoDB met à disposition la fonction update avec différents opérateurs en fonction du type de mise à jour souhaité. La fonction update prend deux arguments obligatoires :

  • un document représentant la condition de recherche des documents de la collection
  • un document représentant la mise à jour souhaitée

Ajouter ou remplacer un champ existant avec $set

Tutoriel MongoDB 2 - update-set

Dans cet exemple, on a simplement rajouté un champ ville dans le document de Jacques.

Rajoutons un document dans notre collection :

Tutoriel MongoDB 2 - update-insert


Faisons une mise à jour sur les documents portant le nom stephane.

Tutoriel MongoDB 2 - update-many1

Le résultat de la commande montre qu’un seul document a été mis à jour. La commande find montre que le premier document avec le nom « stephane » a bien été modifié mais pas le second. C’est une protection dans MongoDB pour empêcher par défaut la mise à jour sur de multiples documents. Si c’est ce que l’on souhaite, il faut rajouter une instruction multi: true dans notre fonction update.

Tutoriel MongoDB 2 - update

Incrémenter un champ numérique existant avec $inc

Dans certains cas, on peut avoir envie de faire une mise à jour en se basant sur la valeur actuelle du champ. $inc permet de rajouter une valeur à une donnée numérique. Cette valeur peut être positive ou négative.
Si je souhaite par exemple incrémenter l’âge de Paul, je peux exécuter la commande suivante :

Incrémenter un champ numérique existant avec $inc

Mettre à jour un tableau avec $push ou $pull

Si j’utilise $set sur un tableau, je vais remplacer le tableau existant par un nouvelle élément. Comment mettre à jour le tableau sans écraser les données existantes ?
L’opérateur $push permet de rajouter un nouvel élément à un tableau.

Tutoriel MongoDB 2 - update-push

Dans cet exemple, j’ai rajouté « nantes » dans le tableau contenant déjà « paris » et « nice ». Il faut noter que si « Nantes » était déjà présent, l’élément aurait été quand même inséré. Si l’on ne souhaite pas de doublon, il existe l’opérateur $addToSet qui assure cette fonction.

Pour supprimer un élément, on peut utiliser $pull. Ainsi, si je souhaite supprimer la ville de « nice », je lance la commande suivante :

Tutoriel MongoDB 2 - update-pull

Il existe bien d’autres opérateurs et je vous invite à consulter la documentation officielle pour en connaître la liste exhaustive.

Ceci termine ce deuxième tutoriel sur MongoDB. Dans un prochain article, nous étudierons l’indexation et certains aspects liés à la performance des requêtes.

👉 Retrouvez toute notre actu en temps réel en nous suivant sur LinkedIn 👈

Business & Decision

Plus de 20 ans d’expérience dans la mise en place d’architectures dédiées à la valorisation de vos données grâce aux technologies BI et Big Data.

En savoir plus >

Commentaires (5)

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Votre adresse de messagerie est uniquement utilisée par Business & Decision, responsable de traitement, aux fins de traitement de votre demande et d’envoi de toute communication de Business & Decision en relation avec votre demande uniquement. En savoir plus sur la gestion de vos données et vos droits.

Nada Le 07 août 2018 à 21h34
comment insérer une image dans une base NoSql (mongodb)
merci
Stéphane WALTER Le 13 août 2018 à 9h36
Bonjour Nada
Pour tous les documents excédant les 16 Mo, il faut passer par un outil tiers GridFs.
Pour plus d'information, tu peux te reporter à la documentation Mongo https://docs.mongodb.com/manual/core/gridfs/index.html
Fred Le 17 novembre 2019 à 13h47
Hello Nada, surtout ça n a aucun intérêt de stocker une image sur une bdd. Le plus souvent on procède autrement : on stock l image sur un serveur distant (storage s3 aws par exemple) et on ajoute juste la reference de l url de l image en base de données.
20-100 Le 03 décembre 2020 à 10h18
Bonjour,

Merci pour cet article pédagogique.

Remarque amicale: La capture d'écran de l'exemple d'update en utilisant l'option "multi" correspond en réalité à l'update incrémental d'un champ numérique (présenté dans la section suivante).

Bien à vous.
Business & Decision Le 03 décembre 2020 à 18h27
Bonjour,
Merci pour votre retour et votre remarque pertinente : c'est modifié !
Bien à vous