MongoDB étant la base de données NoSQL orientés 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.
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 documents dans une collection, il existe deux méthodes :
db.posts.insertOne({ subject: "Blog Post", content: "Lorem Ipsum" })
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.
Pour retrouver vos documents sur votre base de données mongo, voici la liste de mongodb query :
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 50 000 risque de ne pas être accepté par votre serveur mongo.
db.posts.findOne({ subject: "Blog Post 1"})
Cette requête mongodb 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.
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 findOneAndUpdate
et findAndModify
qui fonctionnent de la même façon.
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
.
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 ] } } } } } ])
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.
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 })
db.posts.deleteOne( { category: "technology", status: "published" })
Pour effacer toute une collection :
db.posts.deleteMany({})
Effacer uniquement les documents suivant certains critères :
db.posts.deleteMany({ tags : "technology" })
Elles sont passées où les femmes dans la tech ? Entre le manque de représentation…
Dans cette vidéo, on interview Nicolas Grekas, contributeur clé de Symfony, pour discuter de sa…
Comment trouver son job dans la tech ? Marie a la réponse ! Grâce à…
Adobe, l'empire créatif, et pas des moindres ! Belle ascension de la part de ces…
Est-ce plus simple de créer des morceaux avec les outils de Musique Assistée par Ordinateur…