Practical Programming
Mongodb: le guide complet

MongoDB query: les requêtes à connaître

MongoDB étant la base de données NoSQL orientée documents la plus populaire du marché ces dernières années, de plus en plus d’entreprises y ont investi leurs données. En tant que développeur qui souhaite intervenir sur ces projets, tu es sur la bonne page : voici une liste de Mongodb Query essentielles pour démarrer.

Cet article traite des Mongodb queries pour opérer directement sur la base de données mongo via le shell, un mongodb client ou sur ton app NodeJS avec MongoClient. Avant d’aller plus loin, il faut préalablement avoir installé mongodb (voir guide d’installation Mac, Windows ou Linux) et créé une base de données. Si tu souhaites voir les opérations Mongoose, je t’invite à te rendre sur la page dédiée.

Mongodb query: Create

Il s’agit opérations de création d’un ou plusieurs documents sur la base mongo.

Dans un mongo shell, il suffit de faire: use <nom_de_la_db> pour que mongo la crée si elle n’existe pas déjà.

Pour créer un ou des document(s) dans une collection, il existe deux méthode :

insertOne

db.posts.insertOne({ subject: "Blog Post", content: "Lorem Ipsum" })

insertMany

db.posts.insertMany([
{ subject: "Blog Post 1", content: "Lorem Ipsum" },
{ subject: "Blog Post 2", content: "Lorem Ipsum bis" },
{ subject: "Blog Post 3", content: "Lorem Ipsum ter" },
{ subject: "Blog Post 4", content: "Lorem Ipsum etc" },
])

De la même façon que pour la base de données, si la collection n’existe pas en amont de la création, cette mongodb query va la créer pour vous.

La mongodb query de création de document est atomique au niveau du document. Cela veut dire que dans le cas d’une opération insertMany où pour une raison quelconque l’opération ne serait pas complétée jusqu’au bout, les documents qui ont été créés au début de cette mongodb query sont tout de même sauvegardés dans la base de données. Depuis la version 4.0, mongodb supporte l’atomicité multi-documents dans le cadre des transactions.

Note : il existe également la mongodb query insert qui peut insérer un ou plusieurs documents dans la collection.

Mongodb query: Read

Pour retrouver vos documents sur votre base de données mongo, voici la liste de mongodb query :

Retrouver tous les documents

db.posts.find({ })

Cette requête vous retournera tous les posts dans la base. Attention, cette requête n’est utilisable que dans le cas où vous avez peu de documents dans la collection. Dès que celle-ci grandira, il faudra prévoir une limite et une pagination à chaque chargement. En effet, récupérer 30 documents est faisable en une mongodb query, en récupérer 50000 risque de ne pas être accepté par votre serveur mongo.

Mongodb query pour récupérer un seul document

db.posts.findOne({ subject: "Blog Post 1"})

Cette mongodb query vous retournera un seul document ; le premier qui matchera les critères entre les accolades. Attention à bien prévoir des mongodb index sur les champs sur lesquels vous voudrez rechercher un document afin de maximiser les performances de vos requêtes.

Mongodb query: Update

updateOne

Pour mettre à jour un seul document :

db.posts.updateOne( { subject: "Blog Post 1" }, [ { $set: { "category": "technology", lastUpdate: "$$NOW"} } ] )

Dans ce cas, nous allons mettre à jour le post ayant pour titre “Blog Post 1” et lui ajouter category et lastUpdate en utilisant un pipeline d’aggregation.

Note: il existe également les mongodb queries findOneAndUpdateet findAndModify qui fonctionnent de la même façon.

updateMany

Pour mettre à jour plusieurs documents :

db.posts.updateMany( { subject: $exists }, [ { $unset: "category"}, {$set: {tags:['technology']} }] )

Dans ce cas, nous voulons mettre à jour tous les posts ayant un champ “subject” en retirant la propriété “category” et en rajoutant la propriété { tags: ['technology'] }.

Note: il existe également une méthode update qui par défaut se comporte comme la méthode updateOne. Vous pouvez également lui passer l’option { multi:true } pour qu’elle se comporte comme la méthode updateMany.

updateOne ou updateMany avec un pipeline d’aggregation

Depuis la version 4.2 de mongodb, les queries d’update peuvent être utilisées avec des aggregations :

$addFields$set
$project$unset
$replaceRoot$replaceWith
db.temperatures.updateMany( { },
  [
    { $addFields: { "tempsF": {
          $map: {
             input: "$tempsC",
             as: "celsius",
             in: { $add: [ { $multiply: ["$$celsius", 9/5 ] }, 32 ] 
            }
          }
    } } }
  ]
)

replaceOne

La mongodb query replaceOne permet de remplacer l’ensemble du document à l’exception de son _id. Contrairement aux méthodes updateOne et updateMany, vous ne pouvez pas passer de pipeline d’aggregation pour modifier votre document. Il faut forcément passer le nouvel objet complet.

l’upsert

Les trois mongodb queries permettant l’update d’un document disposent également de l’option “upsert”. L’upsert permet de créer un document si celui qui est ciblé dans la requête d’update n’existe pas.

Pour l’activer, il suffit de passer l’option comme suit :

db.posts.updateOne(
   { subject: "Blog Post 1" },
   { subject: "Blog Post" },
   { upsert: true }
)

Mongodb query: Delete

deleteOne

db.posts.deleteOne(
   { category: "technology", status: "published" }
)

deleteMany

Pour effacer toute une collection :

db.posts.deleteMany({})

Effacer uniquement les documents suivant certains critères :

db.posts.deleteMany({ tags : "technology" })

Pour aller plus loin:

Retrouvez nous

N'hésitez pas à nous suivre sur les différents réseaux sociaux !

Most popular

Most discussed

Share This