Node.js MongoDB Tutoriel avec exemples
⚡ Résumé intelligent
Node.js MongoDB L'intégration permet à une application Node de se connecter à une base de données NoSQL, d'exécuter des opérations CRUD et d'exposer des enregistrements en direct via des routes Express, en utilisant le pilote mongodb natif associé à Mongoose pour la modélisation des données basée sur un schéma.
La quasi-totalité des applications web modernes disposent d'un système de stockage de données côté serveur. Prenons l'exemple d'une boutique en ligne.ping Dans cette application, des données telles que le prix d'un article seraient stockées dans la base de données.
Le framework Node js peut fonctionner avec des bases de données à la fois relationnelles (telles que Oracle et MS SQL Server) et les bases de données non relationnelles (telles que MongoDB). Dans ce didacticiel, nous verrons comment utiliser les bases de données à partir des applications Node js.
Bases de données Node.js et NoSQL
Au fil des ans, les bases de données NoSQL telles que MongoDB et les bases de données relationnelles telles que MySQL Les bases de données sont devenues très populaires pour le stockage de données. Leur capacité à stocker tout type de données, et notamment dans n'importe quel format, explique leur utilisation si répandue.
Node.js a la capacité de fonctionner avec les deux MySQL et MongoDB comme bases de données. Pour utiliser l'une ou l'autre de ces bases de données, vous devez télécharger et utiliser les modules requis à l'aide du gestionnaire de packages Node.
Pour MySQL, le module requis s'appelle « mysql ». MongoDBLes développeurs peuvent installer soit la version native officielle, soit la version native. mongodb pilote, qui est le package utilisé dans tous les exemples de code de cet article, ou une bibliothèque basée sur un schéma telle que Mangouste une fois que l'application a besoin d'une structure plus détaillée.
Avec ces modules, vous pouvez effectuer les opérations suivantes dans Node.js
- Gérer le pool de connexions – C'est ici que vous pouvez spécifier le nombre de MySQL connexions à la base de données qui doivent être maintenues et enregistrées par Node.js.
- Créez et fermez une connexion à une base de données. Dans les deux cas, vous pouvez fournir une fonction de rappel qui peut être appelée chaque fois que les méthodes de connexion « créer » et « fermer » sont exécutées.
- Des requêtes peuvent être exécutées pour obtenir des données des bases de données respectives afin de récupérer des données.
- La manipulation des données, telle que l'insertion de données, la suppression et la mise à jour de données, peut également être réalisée avec ces modules.
Pour les sujets restants, nous verrons comment nous pouvons travailler avec MongoDB bases de données au sein Node.js, en commençant par une brève comparaison des deux manières les plus courantes de parler à MongoDB d'un projet Node.js.
MongoDB Pilote natif vs Mongoose dans Node.js
Les noms de modules mentionnés ci-dessus peuvent prêter à confusion, car Node.js propose deux manières différentes de communiquer avec MongoDB: l'autochtone mongodb le conducteur et le Mangouste Bibliothèque de modélisation de données objet (ODM). Tous les exemples de code présentés dans cet article utilisent le pilote natif, installé avec npm installer mongodb et accessible par Client MongoMongoose utilise ce même pilote et y ajoute des définitions de schéma, la validation et des méthodes de modèle réutilisables, ce qui convient aux applications de grande envergure nécessitant une structure de données prévisible pour de nombreuses collections. Comprendre la différence dès le départ évite toute confusion lors de l'installation de packages ou de la lecture d'autres documents Node.js. MongoDB Des exemples sont disponibles en ligne. Le tableau ci-dessous compare les deux options afin d'aider les développeurs à choisir l'outil le plus adapté à leurs projets.
| Aspect | Pilote MongoDB natif | Mangouste |
|---|---|---|
| Installation | npm installer mongodb | npm install mongoose |
| Application du schéma | Aucun, les documents restent flexibles | Défini par un objet Schema |
| Courbe d'apprentissage | Plus bas, plus proche du cru MongoDB requêtes | Higher ajoute sa propre couche API |
| Meilleur pour | Petits scripts et code sensible aux performances | Applications plus importantes avec des modèles de données cohérents |
Astuce: Utilisez le pilote natif pendant votre apprentissage des bases. MongoDB commandes, puis passez à Mangouste une fois que l'application nécessite une validation de schéma sur plusieurs collections.
L'utilisation de MongoDB et Node.js
La terminologie étant désormais clarifiée, la suite de cet article utilise exclusivement le pilote natif, tel qu'il apparaît dans les exemples de code ci-dessous. Comme évoqué précédemment, MongoDB est l'une des bases de données les plus populaires utilisées avec Node.js.
Dans ce chapitre, nous verrons comment établir des liens avec un MongoDB base de données, et comment effectuer les opérations normales de lecture de données dans une base de données ainsi que d'insertion, de suppression et de mise à jour d'enregistrements dans une MongoDB base de données.
Pour les besoins de ce chapitre, supposons que nous ayons le ci-dessous MongoDB données en place.
Nom de la base de données : EmployeeDB
Nom de la collection : Employé
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
- Installation des modules NPM
Vous avez besoin d'un pilote pour accéder à Mongo depuis une application Node. Il existe un certain nombre de pilotes Mongo disponibles, mais MongoDB est parmi les plus populaires. Pour installer le MongoDB module, exécutez la commande ci-dessous
npm installer mongodb
- Création et fermeture d'une connexion à un MongoDB base de données. L'extrait de code ci-dessous montre comment créer et fermer une connexion à un MongoDB base de données.
Code Explication:
- La première étape consiste à inclure le MongoDB Le module pilote est installé via la fonction require. Une fois ce module en place, nous pouvons utiliser les fonctions nécessaires pour établir des connexions à la base de données.
- Ensuite, nous spécifions notre chaîne de connexion à la base de données. Dans la chaîne de connexion, 3 valeurs clés sont transmises.
- Le premier est « mongodb » qui précise que nous nous connectons à une base de données mongoDB.
- Le suivant est « localhost », ce qui signifie que nous nous connectons à une base de données sur la machine locale.
- Le suivant est « EmployeeDB », qui est le nom de la base de données définie dans notre MongoDB base de données.
- L'étape suivante consiste à se connecter à notre base de données. La fonction de connexion prend en paramètre notre URL Elle offre la possibilité de spécifier une fonction de rappel. Celle-ci sera appelée lors de l'établissement de la connexion à la base de données. Cela nous permet de savoir si la connexion a réussi ou non.
- Dans la fonction, nous écrivons la chaîne « Connexion établie » sur la console pour indiquer qu'une connexion réussie a été créée.
- Enfin, nous fermons la connexion à l'aide de l'instruction db.close.
Si le code ci-dessus est exécuté correctement, la chaîne « Connecté » sera écrite sur la console comme indiqué ci-dessous.
- Interrogation de données dans un MongoDB base de données - En utilisant le MongoDB pilote, nous pouvons également récupérer des données du MongoDB base de données. La section ci-dessous explique comment utiliser le pilote pour récupérer tous les documents de notre collection Employee dans notre base de données EmployeeDB. Il s'agit de la collection dans notre MongoDB base de données, qui contient tous les documents relatifs aux employés. Chaque document a un identifiant d'objet, un nom d'employé et un identifiant d'employé pour définir les valeurs du document.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); cursor.each(function(err, doc) { console.log(doc); }); });
Code Explication:
- Dans un premier temps, nous créons un curseur (un curseur est un pointeur permettant d'accéder aux différents enregistrements extraits d'une base de données. Ce curseur sert ensuite à parcourir les enregistrements de la base de données. Ici, nous définissons une variable nommée `cursor` qui stockera le pointeur vers les enregistrements extraits de la base de données). Ce curseur pointe vers les enregistrements extraits de la collection MongoDB. Nous pouvons également spécifier la collection « Employee » à partir de laquelle extraire les enregistrements. La fonction `find()` est utilisée pour indiquer que nous souhaitons récupérer tous les documents de la collection. MongoDB .
- Nous parcourons maintenant notre curseur et pour chaque document dans le curseur, nous allons exécuter une fonction.
- Notre fonction va simplement imprimer le contenu de chaque document sur la console.
Remarque: - Il est également possible d'extraire un enregistrement spécifique d'une base de données. Pour ce faire, il suffit de spécifier la condition de recherche dans la fonction `find()`. Par exemple, supposons que vous souhaitiez extraire l'enregistrement contenant le nom de l'employé : Guru99, alors cette affirmation peut s'écrire comme suit
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Si le code ci-dessus est exécuté avec succès, la sortie suivante sera affichée dans votre console.
Sortie :
De la sortie,
- Vous pourrez voir clairement que tous les documents de la collection sont récupérés. Ceci est possible en utilisant la méthode find() de la connexion mongoDB (db) et en parcourant tous les documents à l'aide du curseur.
- Insérer des documents dans une collection – Les documents peuvent être insérés dans une collection à l’aide de la méthode insertOne fournie par le MongoDB bibliothèque. L'extrait de code ci-dessous montre comment nous pouvons insérer un document dans une collection mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').insertOne({ Employeeid: 4, EmployeeName: "NewEmployee" }); });
Code Explication:
- Ici, nous utilisons la méthode insertOne du MongoDB bibliothèque pour insérer un document dans la collection Employee.
- Nous spécifions les détails du document sur ce qui doit être inséré dans la collection Employee.
Si vous vérifiez maintenant le contenu de votre MongoDB base de données, vous trouverez l'enregistrement avec Employeeid de 4 et EmployeeName de « NewEmployee » inséré dans la collection Employee.
À noter: La console n'affichera aucune sortie car l'enregistrement est en cours d'insertion dans la base de données et aucune sortie ne peut être affichée ici.
Pour vérifier que les données ont été correctement insérées dans la base de données, vous devez exécuter les commandes suivantes dans MongoDB
- Utiliser EmployeeDB
- db.Employee.find({Employeeid :4 })
La première instruction garantit que vous êtes connecté à la base de données EmployeeDb. La deuxième instruction recherche l'enregistrement dont l'identifiant d'employé est 4.
- Mise à jour de documents dans une collection – Les documents peuvent être mis à jour dans une collection en utilisant la méthode updateOne fournie par le MongoDB bibliothèque. L'extrait de code ci-dessous montre comment mettre à jour un document dans une collection mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').updateOne({ "EmployeeName": "NewEmployee" }, { $set: { "EmployeeName": "Mohan" } }); });
Code Explication:
- Nous utilisons ici la méthode « updateOne » du MongoDB bibliothèque, qui est utilisée pour mettre à jour un document dans une collection mongoDB.
- Nous précisons les critères de recherche selon lesquels le document doit être mis à jour. Dans notre cas, nous voulons trouver le document dont le EmployeeName est « NewEmployee ».
- Nous souhaitons ensuite définir la valeur du EmployeeName du document de « NewEmployee » à « Mohan ».
Si vous vérifiez maintenant le contenu de votre MongoDB base de données, vous trouverez l'enregistrement avec Employeeid de 4 et EmployeeName de « Mohan » mis à jour dans la collection Employee.
Pour vérifier que les données ont été correctement mises à jour dans la base de données, vous devez exécuter les commandes suivantes dans MongoDB
- Utiliser EmployeeDB
- db.Employee.find({Employeeid :4 })
La première instruction garantit que vous êtes connecté à la base de données EmployeeDb. La deuxième instruction recherche l'enregistrement dont l'identifiant d'employé est 4.
- Supprimer des documents dans une collection – Les documents peuvent être supprimés dans une collection en utilisant la méthode « deleteOne » fournie par le MongoDB bibliothèque. L'extrait de code ci-dessous montre comment supprimer un document dans une collection mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').deleteOne( { "EmployeeName": "Mohan" } ); });
Code Explication:
- Nous utilisons ici la méthode « deleteOne » du MongoDB bibliothèque, qui est utilisée pour supprimer un document dans une collection mongoDB.
- Nous précisons les critères de recherche selon lesquels le document doit être supprimé. Dans notre cas, nous voulons trouver le document qui a le EmployeeName de « Mohan » et supprimer ce document.
Si vous vérifiez maintenant le contenu de votre MongoDB base de données, vous trouverez l'enregistrement avec Employeeid de 4 et EmployeeName de « Mohan » supprimé de la collection Employee.
Pour vérifier que les données ont été correctement mises à jour dans la base de données, vous devez exécuter les commandes suivantes dans MongoDB
- Utiliser EmployeeDB
- db.Employee.find()
La première instruction garantit que vous êtes connecté à la base de données EmployeeDb. La deuxième instruction recherche et affiche tous les enregistrements de la collection des employés. Ici, vous pouvez voir si l'enregistrement a été supprimé ou non.
Async/Await moderne MongoDB Connexions dans Node.js
Le MongoClient.connect(url, callback) Le motif utilisé tout au long de cet article correspond au MongoDB La version du pilote Node.js utilisée lors de la rédaction des exemples ci-dessus est celle en vigueur. Bien que les versions récentes du pilote prennent toujours en charge ce style de rappel, la plupart des nouveaux projets privilégient désormais les promesses et l'utilisation d'async/await, car le code résultant se lit de haut en bas sans rappels imbriqués. Les étapes ci-dessous permettent de réécrire la même connexion Employee en utilisant la syntaxe moderne.
- Créez une seule instance de MongoClient en dehors de toute fonction, en passant la chaîne de connexion une seule fois, par exemple. const client = new MongoClient(url);
- Appeler attendre client.connecter() à l'intérieur d'une fonction asynchrone pour ouvrir la connexion au lieu de passer une fonction de rappel.
- Obtenez la base de données avec client.db('EmployeeDB') au lieu de se fier à l'objet renvoyé dans une fonction de rappel.
- Exécutez des requêtes avec attendre, Par exemple attendre db.collection('Employee').find().toArray(), qui renvoie directement un tableau au lieu de nécessiter une fonction de rappel de curseur.
- Fermez la connexion avec attendre client.fermer() à l'intérieur d'un bloc finally afin qu'il s'exécute toujours, même si une requête génère une erreur.
const { MongoClient } = require('mongodb'); const url = 'mongodb://localhost:27017'; const client = new MongoClient(url); async function run() { try { await client.connect(); const db = client.db('EmployeeDB'); const employees = await db.collection('Employee').find().toArray(); console.log(employees); } finally { await client.close(); } } run().catch(console.error);
Les deux styles se connectent à la même base de données EmployeeDB et à la même collection Employee ; le code existant basé sur les rappels n’a donc pas besoin d’être réécrit immédiatement. Les deux approches peuvent coexister lors d’une migration progressive du projet, et le choix dépend principalement de… MongoDB La version du pilote Node.js est déjà spécifiée dans un fichier package.json.
Comment créer une application Node Express avec MongoDB pour stocker et diffuser du contenu
Les deux styles de connexion étant abordés, la section suivante applique le modèle de rappel classique au sein d'une application Express complète, car il s'agit de la syntaxe utilisée par l'exemple de serveur original ci-dessous. Création d'une application combinant Express et MongoDB est assez courant de nos jours.
Lorsque vous travaillez avec Javascénario Dans le domaine des applications web, on entend généralement parler du terme MEAN stack.
- Le terme pile MEAN fait référence à un ensemble de JavaTechnologies basées sur des scripts utilisées pour développer des applications Web.
- MOYENNE est un acronyme pour MongoDB, ExpressJS, AngularJSet Node.js.
Par conséquent, il est toujours bon de comprendre comment Node.js et MongoDB travailler ensemble pour fournir des applications qui interagissent avec les bases de données back-end.
Regardons un exemple simple de la façon dont nous pouvons utiliser « express » et «MongoDB" ensemble. Notre exemple utilisera la même collection Employee dans le MongoDB Base de données EmployeeDB.
Nous allons maintenant intégrer Express pour afficher les données sur notre page web lorsqu'elles seront demandées par l'utilisateur. Lorsque notre application s'exécute sur Node.js, il sera peut-être nécessaire d'accéder à l'URL. URL http://localhost:3000/Employeeid.
Lorsque la page est lancée, tous les identifiants d'employé de la collection Employé seront affichés. Voyons donc l'extrait de code dans les sections qui nous permettront d'y parvenir.
Étape 1) Définissez toutes les bibliothèques qui doivent être utilisées dans notre application, qui dans notre cas est à la fois la MongoDB et bibliothèque express.
Code Explication:
- Nous définissons notre bibliothèque 'express', qui sera utilisée dans notre application.
- Nous définissons notre 'MongoDB', qui sera utilisée dans notre application pour se connecter à notre MongoDB base de données.
- Nous définissons ici le URL de notre base de données à laquelle se connecter.
- Enfin, nous définissons une chaîne qui sera utilisée pour stocker notre collection d'identifiants d'employé qui devront être affichés ultérieurement dans le navigateur.
Étape 2) Dans cette étape, nous allons maintenant récupérer tous les enregistrements de notre collection « Employé » et travailler avec eux en conséquence.
Code Explication:
- Nous créons un itinéraire vers notre application appelé « Employeeid ». Ainsi, chaque fois que quelqu'un accède à http://localhost:3000/Employeeid de notre application, l'extrait de code défini pour cette route sera exécuté.
- Ici, nous obtenons tous les enregistrements de notre collection « Employé » via la commande db.collection('Employee').find(). Nous attribuons ensuite cette collection à une variable appelée curseur. Grâce à cette variable curseur, nous pourrons parcourir tous les enregistrements de la collection.
- Nous utilisons maintenant la fonction curseur.each() pour parcourir tous les enregistrements de notre collection. Pour chaque enregistrement, nous allons définir un extrait de code sur ce qu'il faut faire lors de l'accès à chaque enregistrement.
- Enfin, on voit que si l'enregistrement retourné n'est pas nul, alors on prend le salarié via la commande « item.Employeeid ». Le reste du code consiste simplement à construire un code HTML approprié qui permettra à nos résultats de s'afficher correctement dans le navigateur.
Étape 3) Dans cette étape, nous allons envoyer notre sortie vers la page Web et faire écouter notre application sur un port particulier.
Code Explication:
- Ici, nous envoyons l'intégralité du contenu qui a été construit à l'étape précédente vers notre page Web. Le paramètre 'res' nous permet d'envoyer du contenu à notre page Web en réponse.
- Nous faisons écouter l’intégralité de notre application Node.js sur le port 3000.
Sortie :
De la sortie,
- Cela montre clairement que tous les identifiants d'employé de la collection Employee ont été récupérés. C'est parce que nous utilisons le MongoDB chauffeur pour se connecter à la base de données et récupérer tous les enregistrements des employés, puis utiliser « express » pour afficher les enregistrements.
Voici le code pour votre référence
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); //noinspection JSDeprecatedSymbols cursor.each(function(err, item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }); res.send(str); db.close(); }); }); var server = app.listen(3000, function() {});
À noter: curseur.each peut-être obsolète en fonction de la version de votre MongoDB conducteur. Vous pouvez ajouter //noinspection JSDeprecatedSymbols avant curseur.each pour contourner le problème. Vous pouvez également utiliser forEach. Vous trouverez ci-dessous l'exemple de code utilisant forEach
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var collection = db.collection('Employee'); var cursor = collection.find({}); str = ""; cursor.forEach(function(item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }, function(err) { res.send(err); db.close(); } ); }); }); var server = app.listen(8080, function() {});












