Une introduction à Mongoose pour MongoDB et Node.js

Mongoose est un framework JavaScript couramment utilisé dans une application Node.js avec une base de données MongoDB. Dans cet article, je vais vous présenter Mongoose et MongoDB, mais surtout où ces technologies s’intègrent dans votre application..

Qu'est-ce que MongoDB??

Commençons par MongoDB. MongoDB est une base de données qui stocke vos données sous forme de documents. Le plus souvent, ces documents ressemblent à une structure de type JSON:

Prénom: "Jamie", nom: "Munro"

Un document est ensuite placé dans une collection. À titre d’exemple, l’exemple de document ci-dessus définit un utilisateur objet. Ce utilisateur objet alors serait généralement partie d'une collection appelée utilisateurs.

L'un des facteurs clés de MongoDB est sa flexibilité en termes de structure. Même si dans le premier exemple, le utilisateur objet contenait un Prénom et nom de famille propriété, ces propriétés ne sont pas nécessaires dans tous utilisateur document qui fait partie de la utilisateurs collection. C'est ce qui différencie MongoDB d'une base de données SQL telle que MySQL ou Microsoft SQL Server, qui requiert un schéma de base de données fortement défini pour chaque objet stocké..

La possibilité de créer des objets dynamiques stockés en tant que documents dans la base de données est là où Mongoose entre en jeu..

Qu'est-ce que la mangouste??

Mongoose est un mappeur de document objet (ODM). Cela signifie que Mongoose vous permet de définir des objets avec un schéma fortement typé mappé sur un document MongoDB..

Mongoose fournit une quantité incroyable de fonctionnalités pour créer et utiliser des schémas. Mongoose contient actuellement huit SchemaTypes dans lesquels une propriété est enregistrée lorsqu'elle est persistée dans MongoDB. Elles sont:

  1. Chaîne
  2. Nombre
  3. Rendez-vous amoureux
  4. Tampon
  5. Booléen
  6. Mixte
  7. ObjectId
  8. Tableau

Chaque type de données vous permet de spécifier:

  • une valeur par défaut
  • une fonction de validation personnalisée
  • indiquer qu'un champ est requis
  • une fonction get qui vous permet de manipuler les données avant qu'elles ne soient renvoyées sous forme d'objet
  • une fonction set qui vous permet de manipuler les données avant qu'elles ne soient enregistrées dans la base de données
  • créer des index pour permettre la récupération plus rapide des données

Outre ces options communes, certains types de données vous permettent de personnaliser davantage la manière dont les données sont stockées et extraites de la base de données. Par exemple, un Chaîne Le type de données vous permet également de spécifier les options supplémentaires suivantes:

  • convertissez-le en minuscule
  • convertissez-le en majuscule
  • rogner les données avant de sauvegarder
  • une expression régulière qui peut limiter les données pouvant être enregistrées pendant le processus de validation
  • une énumération qui peut définir une liste de chaînes valides

le Nombre et Rendez-vous amoureux les propriétés prennent en charge la spécification d'une valeur minimale et maximale autorisée pour ce champ.

La plupart des huit types de données autorisés devraient vous être familiers. Cependant, plusieurs exceptions peuvent vous échapper, telles que Tampon, Mixte, ObjectId, et Tableau.

le Tampon Le type de données vous permet de sauvegarder des données binaires. Un exemple courant de données binaires serait une image ou un fichier codé, tel qu'un document PDF..

le Mixte le type de données transforme la propriété en un champ "tout est permis". Ce champ ressemble au nombre de développeurs pouvant utiliser MongoDB car il n’existe pas de structure définie. Méfiez-vous de l'utilisation de ce type de données car il perd de nombreuses fonctionnalités intéressantes fournies par Mongoose, telles que la validation des données et la détection des modifications d'entités, afin de savoir automatiquement comment mettre à jour la propriété lors de l'enregistrement..

le ObjectId type de données spécifie généralement un lien vers un autre document de votre base de données. Par exemple, si vous avez une collection de livres et d’auteurs, le document de livre peut contenir un ObjectId propriété qui fait référence à l'auteur spécifique du document.

le Tableau Le type de données vous permet de stocker des tableaux de type JavaScript. Avec un type de données Array, vous pouvez y effectuer des opérations de tableau JavaScript courantes, telles que push, pop, shift, slice, etc..

Récapitulation rapide

Avant de passer à la génération de code, je voulais simplement récapituler ce que nous venons d’apprendre. MongoDB est une base de données qui vous permet de stocker des documents avec une structure dynamique. Ces documents sont enregistrés dans une collection.

Mongoose est une bibliothèque JavaScript qui vous permet de définir des schémas avec des données fortement typées. Une fois qu'un schéma est défini, Mongoose vous permet de créer un modèle basé sur un schéma spécifique. Un modèle Mongoose est ensuite mappé sur un document MongoDB via la définition de schéma du modèle..

Une fois que vous avez défini vos schémas et modèles, Mongoose contient de nombreuses fonctions différentes qui vous permettent de valider, enregistrer, supprimer et interroger vos données à l'aide de fonctions MongoDB courantes. Je vais en parler plus avec les exemples de code concrets à suivre.

Installer MongoDB

Avant de pouvoir commencer à créer nos schémas et modèles Mongoose, MongoDB doit être installé et configuré. Je suggère de visiter la page de téléchargement de MongoDB. Il existe plusieurs options disponibles à installer. Je me suis connecté au serveur de communauté. Cela vous permet d'installer une version spécifique à votre système d'exploitation. MongoDB propose également un serveur d'entreprise et une installation de support cloud. Puisque des livres entiers peuvent être écrits sur l’installation, le réglage et la surveillance de MongoDB, je vais m'en tenir au serveur de communauté..

Une fois que vous avez téléchargé et installé MongoDB pour le système d'exploitation de votre choix, vous devez démarrer la base de données. Plutôt que de réinventer la roue, je vous suggère de consulter la documentation de MongoDB sur l'installation de MongoDB Community Edition..

Je vais attendre ici pendant que vous configurez MongoDB. Lorsque vous êtes prêt, nous pouvons configurer Mongoose pour qu'il se connecte à la base de données MongoDB que vous venez d'installer..

Mise en place de mangouste

Mongoose est un framework JavaScript, et je vais l'utiliser dans une application Node.js. Si vous avez déjà installé Node.js, vous pouvez passer à l'étape suivante. Si vous n'avez pas installé Node.js, je vous suggère de commencer par visiter la page de téléchargement de Node.js et de sélectionner le programme d'installation correspondant à votre système d'exploitation..

Avec Node.js configuré et prêt à fonctionner, je vais créer une nouvelle application, puis installer le package Mongoose NPM..

Avec une invite de commande définie à l'emplacement où vous souhaitez installer votre application, vous pouvez exécuter les commandes suivantes:

mkdir mongoose_basics cd mongoose_basics npm init

Pour l'initialisation de mon application, j'ai tout laissé comme valeurs par défaut. Maintenant, je vais installer le paquet mangouste comme suit:

npm install mongoose --save

Avec toutes les conditions préalables configurées, connectons-nous à une base de données MongoDB. J'ai placé le code suivant dans un fichier index.js car je l'ai choisi comme point de départ de mon application:

var mangouste = require ('mangouste'); mongoose.connect ('mongodb: // localhost / mongoose_basics');

La première ligne de code comprend le mangouste bibliothèque. Ensuite, j'ouvre une connexion à une base de données que j'ai appelée mongoose_basics en utilisant le relier une fonction.

le relier La fonction accepte deux autres paramètres facultatifs. Le deuxième paramètre est un objet d’options dans lequel vous pouvez définir des éléments tels que le nom d’utilisateur et le mot de passe, si nécessaire. Le troisième paramètre, qui peut également être le deuxième paramètre si vous n'avez pas d'options, est la fonction de rappel après une tentative de connexion. La fonction de rappel peut être utilisée de deux manières:

mongoose.connect (uri, options, fonction (erreur) // Erreur lors de la connexion initiale. Il n'y a pas de 2e paramètre pour le rappel.); // Ou en utilisant promesses mongoose.connect (uri, options) .then (() => / ** prêt à être utilisé. La promesse 'mongoose.connect ()' se résout en indéfini. * /, Err => / ** gérer l'erreur de connexion initiale * /);

Pour éviter une introduction potentielle aux promesses JavaScript, je vais utiliser le premier moyen. Vous trouverez ci-dessous un fichier index.js mis à jour:

var mangouste = require ('mangouste'); mongoose.connect ('mongodb: // localhost / mongoose_basics', fonction (err) si (err) renvoie err; console.log ('connecté avec succès'););

Si une erreur se produit lors de la connexion à la base de données, l'exception est levée et tout traitement ultérieur est arrêté. Quand aucune erreur ne se produit, j'ai enregistré un message de réussite sur la console..

Mongoose est maintenant configuré et connecté à une base de données appelée mongoose_basics. Ma connexion MongoDB n'utilise aucun nom d'utilisateur, mot de passe ou port personnalisé. Si vous devez définir ces options ou toute autre option pendant la connexion, je vous suggère de consulter la documentation Mongoose lors de la connexion. La documentation fournit des explications détaillées sur les nombreuses options disponibles, ainsi que sur la création de connexions multiples, le regroupement de connexions, les répliques, etc..

Avec une connexion réussie, passons à la définition d'un schéma Mongoose.

Définir un schéma Mongoose

Pendant l’introduction, j’ai montré un utilisateur objet contenant deux propriétés: Prénom et nom de famille. Dans l'exemple suivant, j'ai traduit ce document en un schéma Mongoose:

var userSchema = mongoose.Schema (firstName: String, lastName: String);

C'est un schéma très basique qui ne contient que deux propriétés auxquelles aucun attribut n'est associé. Développons cet exemple en convertissant les propriétés du prénom et du nom en objets enfant d’un objet. prénom propriété. le prénom la propriété comprendra à la fois le prénom et le nom de famille. Je vais aussi ajouter un créé propriété qui est de type Rendez-vous amoureux.

var userSchema = mongoose.Schema (nom: prénom: chaîne, dernier nom: chaîne, créé: date);

Comme vous pouvez le constater, Mongoose me permet de créer des schémas très flexibles avec de nombreuses combinaisons possibles de la manière dont je peux organiser mes données..

Dans cet exemple, je vais créer deux nouveaux schémas qui montreront comment créer une relation avec un autre schéma: auteur et livre. le livre schéma contiendra une référence à la auteur schéma.

var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, nom: prenom: chaîne, lastName: chaîne, biographie: chaîne, twitter: chaîne, facebook: chaîne, linkedin: chaîne, profil: Image, tampon: créé: type: Date, valeur par défaut: Date.now);

Ci-dessus est le auteur schéma qui développe les concepts de la utilisateur schéma que j'ai créé dans l'exemple précédent. Pour lier l’auteur et le livre ensemble, la première propriété de auteur le schéma est un _id propriété qui est un ObjectId type de schéma. _id est la syntaxe courante pour créer une clé primaire dans Mongoose et MongoDB. Puis, comme le utilisateur schéma, j'ai défini un prénom propriété contenant le prénom et le nom de l'auteur. 

Développer sur le utilisateur schéma, le auteur contient plusieurs autres Chaîne types de schéma. J'ai aussi ajouté un Tampon type de schéma pouvant contenir la photo de profil de l'auteur. La propriété finale contient la date de création de l'auteur; Cependant, vous remarquerez qu'il est créé légèrement différemment car il a défini une valeur par défaut de "maintenant". Lorsqu'un auteur est maintenu dans la base de données, cette propriété est définie sur la date / heure actuelle..

Pour compléter les exemples de schéma, créons un livre schéma qui contient une référence à l'auteur en utilisant le ObjectId type de schéma:

var bookSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, titre: String, résumé: String, isbn: String, miniature: tampon, auteur: type: mongoose.Schema.Types.ObjectId, ref: ' Author ', ratings: [summary: String, détail: String, numberOfStars: Number, créé: type: Date, par défaut: Date.now], créé: type: Date, par défaut: Date.now )

le livre schéma contient plusieurs propriétés de type Chaîne. Comme mentionné ci-dessus, il contient une référence à la auteur schéma. Pour démontrer davantage les puissantes définitions de schéma, le livre schéma contient également un Tableau de évaluations. Chaque note consiste en un résumé, détail, numberOfStars, et créé date de propriété.

Mongoose vous permet de créer des schémas avec des références à d'autres schémas ou, comme dans l'exemple ci-dessus avec évaluations propriété, il vous permet de créer un Tableau de propriétés enfant pouvant être contenues dans un schéma associé (comme livre à auteur) ou en ligne comme dans l'exemple ci-dessus (avec livre à notes Tableau).

Création et enregistrement de modèles Mongoose

Depuis le auteur et livre schémas démontrent la souplesse du schéma de Mongoose, je vais continuer à utiliser ces schémas et à en tirer un Auteur et Livre modèle d'eux.

var Author = mongoose.model ('Auteur', authorSchema); var Book = mongoose.model ('Livre', bookSchema);

Une fois enregistré, un modèle Mongoose crée un document dans MongoDB avec les propriétés définies par le schéma dont il est dérivé..

Pour illustrer la création et la sauvegarde d’un objet, dans cet exemple, je vais créer plusieurs objets: un Auteur Modèle et plusieurs Livre Des modèles. Une fois créés, ces objets seront conservés dans MongoDB en utilisant le enregistrer méthode du modèle.

var jamieAuthor = nouvel auteur _id: nouveau mongoose.Types.ObjectId (), nom: prénom: 'Jamie', nom: 'Munro', biographie: 'Jamie est l'auteur de ASP.NET MVC 5 avec Bootstrap et Knockout .js. ', twitter:' https://twitter.com/endyourif ', facebook:' https://www.facebook.com/End-Your-If-194251957252562/ '; jamieAuthor.save (function (err) if (err) renvoie err; console.log ('Auteur enregistré avec succès.'); var mvcBook = nouveau livre _id: new mongoose.Types.ObjectId (), titre: 'ASP. NET MVC 5 avec Bootstrap et Knockout.js ', auteur: jamieAuthor._id, notes: [résumé:' Grande lecture ']; mvcBook.save (fonction (err) si (err) renvoie une erreur; console.log ('Livre enregistré avec succès.');); Var knockoutBook = nouveau livre _id: new mongoose.Types.ObjectId (), titre: 'Knockout.js: Création d'applications Web dynamiques côté client', auteur: jamieAuthor._id knockoutBook.save (function (err) if (err) renvoie err; console.log ('Livre enregistré avec succès.');););

Dans l'exemple ci-dessus, j'ai inséré sans vergogne une référence à mes deux livres les plus récents. L’exemple commence par créer et sauvegarder un jamieObject qui est créé à partir d'unAuteur Modèle. À l'intérieur de enregistrer fonction de la jamieObject, si une erreur survient, l'application générera une exception. Lorsque la sauvegarde est réussie, à l'intérieur du enregistrer fonction, les deux objets de livre sont créés et enregistrés. Semblable à la jamieObject, Si une erreur survient lors de la sauvegarde, une erreur est générée. sinon, un message de réussite est émis dans la console.

Pour créer la référence à l'auteur, les objets de livre référencent tous les auteur le schéma _id clé primaire dans le auteur propriété du livre schéma.

Validation des données avant la sauvegarde

Il est assez courant que les données qui finissent par créer un modèle soient renseignées par un formulaire sur une page Web. De ce fait, il est judicieux de valider ces données avant de sauvegarder le modèle dans MongoDB..

Dans cet exemple, j'ai mis à jour le schéma d'auteur précédent pour ajouter une validation sur les propriétés suivantes: Prénom, gazouillement, Facebook, et linkedin.

var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, nom: prénom: type: chaîne, obligatoire: true, nom: chaîne, biographie: chaîne, twitter: type: chaîne, valider : validator: function (text) return text.indexOf ('https://twitter.com/') === 0;, message: 'Le descripteur Twitter doit commencer par https://twitter.com/' , facebook: type: Chaîne, valider: validateur: fonction (texte) return text.indexOf ('https://www.facebook.com/') === 0;, message: 'Facebook doit commencer avec https://www.facebook.com/ ', linkedin: type: chaîne, valider: validateur: fonction (texte) return text.indexOf (' https://www.linkedin.com/ ') === 0;, message: 'LinkedIn doit commencer par https://www.linkedin.com/', profilePicture: Tampon, créé: type: Date, par défaut: Date.now);

le Prénom la propriété a été attribuée à la Champs obligatoires propriété. Maintenant, quand j'appelle le enregistrer fonction, Mongoose renverra une erreur avec un message indiquant le Prénom la propriété est requise. J'ai choisi de ne pas faire le nom de famille propriété requise dans le cas où Cher ou Madonna seraient des auteurs dans ma base de données.

le gazouillement, Facebook, et linkedin des validateurs personnalisés très similaires sont appliqués aux propriétés. Ils veillent chacun à ce que les valeurs commencent par le nom de domaine respectif des réseaux sociaux. Ces champs ne sont pas obligatoires, le validateur ne sera appliqué que lorsque des données seront fournies pour cette propriété..

Recherche et mise à jour des données

Une introduction à Mongoose ne serait pas complète sans un exemple de recherche d'un enregistrement et de mise à jour d'une ou plusieurs propriétés de cet objet..

Mongoose fournit plusieurs fonctions différentes pour rechercher des données pour un modèle spécifique. Les fonctions sont trouver, findOne, et findById.

le trouver et findOne fonctions acceptent un objet comme entrée permettant des recherches complexes, alors que findById accepte uniquement une valeur unique avec une fonction de rappel (un exemple suivra sous peu). Dans cet exemple, je vais montrer comment trouver tous les livres contenant la chaîne "mvc" dans leur titre..

Book.find (titre: / mvc / i). Exec (fonction (err, livres) if (err) renvoie err; console.log (livres););

À l'intérieur de trouver fonction, je recherche la chaîne "mvc" insensible à la casse Titre propriété. Ceci est accompli en utilisant la même syntaxe pour rechercher une chaîne avec JavaScript.

L’appel de la fonction de recherche doit également être chaîné à d’autres méthodes de requête, telles que , et, ou, limite, Trier, tout, etc.

Développons l’exemple précédent pour limiter nos résultats aux cinq premiers livres et trier par date décroissante. Cela va retourner aux cinq livres les plus récents contenant "mvc" dans le titre.

Book.find (titre: / mvc / i). Sort ('- créé') .limit (5) .exec (fonction (err, livres) if (err) renvoie err; console.log (livres); );

Après avoir appliqué le trouver fonction, l'ordre des autres fonctions n'a pas d'importance car toutes les fonctions chaînées sont compilées ensemble dans une requête unique et ne pas exécuté jusqu'au exec la fonction s'appelle.

Comme je l'ai mentionné plus tôt, le findById est exécuté un peu différemment. Il s'exécute immédiatement et accepte une fonction de rappel au lieu de permettre une chaîne de fonctions. Dans cet exemple suivant, je questionne un auteur spécifique par son _id.

Author.findById ('59b31406beefa1082819e72f', fonction (erreur, auteur) si (erreur) renvoie une erreur; console.log (auteur););

le _id dans votre cas pourrait être légèrement différent. J'ai copié ça _id d'un précédent console.log lors de la recherche d'une liste de livres avec "mvc" dans leur titre.

Une fois qu'un objet a été renvoyé, vous pouvez modifier ses propriétés pour le mettre à jour. Une fois que vous avez apporté les modifications nécessaires, vous appelez le enregistrer méthode, tout comme lorsque vous créez l'objet. Dans cet exemple suivant, je vais étendre le findbyId exemple et mettre à jour le linkedin propriété sur l'auteur.

Author.findById ('59b31406beefa1082819e72f', fonction (err, auteur) si (err) renvoie err; author.linkedin = 'https://www.linkedin.com/in/jamie-munro-8064ba1a/'; author.save (function (err) if (err) renvoie err; console.log ('Auteur mis à jour avec succès');););

Une fois l’auteur récupéré avec succès, le linkedin la propriété est définie et la enregistrer la fonction est appelée. Mongoose est capable de détecter que le linkedin Cette propriété a été modifiée et une instruction de mise à jour sera envoyée à MongoDB uniquement pour les propriétés modifiées. Si une erreur survient lors de la sauvegarde, une exception sera levée et arrêtera l'application. En cas de succès, un message de réussite est enregistré sur la console..

Mongoose offre également deux fonctions supplémentaires qui permettent de rechercher un objet et de l’enregistrer en une seule étape avec les fonctions nommées en conséquence: findByIdAndUpdate et findOneAndUpdate. Mettons à jour l'exemple précédent pour utiliser le findByIdAndUpdate.

Author.findByIdAndUpdate ('59b31406beefa1082819e72f', linkedin: 'https://www.linkedin.com/in/jamie-munro- 8064ba1a/', function (erreur, auteur) si (erreur) renvoie erreur; console.log (auteur); );

Dans l’exemple précédent, les propriétés à mettre à jour sont fournies en tant qu’objet du deuxième paramètre du paramètre. findByIdAndUpdate une fonction. La fonction de rappel est maintenant le troisième paramètre. Lorsque la mise à jour est réussie, le auteur objet renvoyé contient les informations mises à jour. Ceci est connecté à la console pour voir les propriétés de l'auteur mises à jour.

Code de l'échantillon final

Tout au long de cet article, j'ai fourni de petits extraits de code identifiant une action très spécifique, telle que la création d'un schéma, la création d'un modèle, etc. Reprenons le tout dans un exemple complet.. 

Tout d'abord, j'ai créé deux fichiers supplémentaires: author.js et book.js. Ces fichiers contiennent leurs définitions de schéma respectives et la création du modèle. La dernière ligne de code rend le modèle disponible pour une utilisation dans index.js fichier.

Commençons par le fichier author.js:

var mangouste = require ('mangouste'); var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, nom: prénom: type: chaîne, obligatoire: true, nom: chaîne, biographie: chaîne, twitter: type: chaîne, valider : validator: function (text) return text.indexOf ('https://twitter.com/') === 0;, message: 'Le descripteur Twitter doit commencer par https://twitter.com/' , facebook: type: Chaîne, valider: validateur: fonction (texte) return text.indexOf ('https://www.facebook.com/') === 0;, message: 'Facebook doit commencer avec https://www.facebook.com/ ', linkedin: type: chaîne, valider: validateur: fonction (texte) return text.indexOf (' https://www.linkedin.com/ ') === 0;, message: 'LinkedIn doit commencer par https://www.linkedin.com/', profilePicture: Tampon, créé: type: Date, par défaut: Date.now); var Author = mongoose.model ('Auteur', authorSchema); module.exports = Auteur;

Vient ensuite le book.js fichier:

var mangouste = require ('mangouste'); var bookSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, titre: String, résumé: String, isbn: String, miniature: tampon, auteur: type: mongoose.Schema.Types.ObjectId, ref: ' Author ', ratings: [summary: String, détail: String, numberOfStars: Number, créé: type: Date, par défaut: Date.now], créé: type: Date, par défaut: Date.now ) var Book = mongoose.model ('Livre', bookSchema); module.exports = Livre;

Et enfin, la mise à jour index.js fichier:

var mangouste = require ('mangouste'); var Author = require ('./ author'); var Book = require ('./ book'); mongoose.connect ('mongodb: // localhost / mongoose_basics', fonction (err) if (err) renvoie err; console.log ('Connexion réussie'); var jamieAuthor = nouvel Auteur (_id: nouveau mongoose.Types. ObjectId (), nom: prénom: 'Jamie', nom: 'Munro', biographie: 'Jamie est l'auteur de ASP.NET MVC 5 avec Bootstrap et Knockout.js.', Twitter: 'https: // twitter .com / endyourif ', facebook:' https://www.facebook.com/End-Your-If-194251957252562/ '); jamieAuthor.save (function (err) if (err) renvoie err; console.log ('Auteur enregistré avec succès.'); Var mvcBook = nouveau livre (_id: nouveau mongoose.Types.ObjectId (), titre: 'ASP.NET MVC 5 avec Bootstrap et Knockout.js', auteur: jamieAuthor._id, ratings : [summary: 'Great read'); mvcBook.save (function (err) if (err) renvoie err; console.log ('Livre enregistré avec succès.');); var knockoutBook = new Book (_id: new mongoose.Types.ObjectId (), titre: 'Knockout.js: Construction d'applications Web côté client dynamiques', auteur: jamieAuthor._id); knockoutBook.save (funct ion (err) si (err) lance err; console.log ('Livre enregistré avec succès.'); ); ); );

Dans l'exemple ci-dessus, toutes les actions de Mongoose sont contenues dans le relier une fonction. le auteur et livre les fichiers sont inclus avec le exiger fonction après avoir inclus le mangouste bibliothèque.

Avec MongoDB en cours d'exécution, vous pouvez maintenant exécuter l'application complète Node.js à l'aide de la commande suivante:

noeud index.js

Après avoir sauvegardé des données dans ma base de données, j'ai mis à jour le index.js fichier avec les fonctions de recherche comme suit:

var mangouste = require ('mangouste'); var Author = require ('./ author'); var Book = require ('./ book'); mongoose.connect ('mongodb: // localhost / mongoose_basics', fonction (err) si (err) renvoie err; console.log ('Connexion réussie'); Book.find (titre: / mvc / i). sort ('- created') .limit (5) .exec (fonction (err, livres) if (err) renvoie err; console.log (livres);); Author.findById ('59b31406beefa1082819e72f', fonction (err , auteur) si (err) lance err; author.linkedin = 'https://www.linkedin.com/in/jamie-munro- 8064ba1a/'; author.save (fonction (err) if (err) throw err; console.log ("Auteur mis à jour avec succès"););); Auteur.findByIdAndUpdate ("59b31406beefa1082819e72f", linkedin: "https://www.linkedin.com/in/jamie-munro-8064ba1a/" , function (err, author) if (err) renvoie err; console.log (author);););

Une fois encore, vous pouvez exécuter l'application avec la commande: noeud index.js.

Résumé

Après avoir lu cet article, vous devriez pouvoir créer des schémas et des modèles Mongoose extrêmement flexibles, appliquer une validation simple ou complexe, créer et mettre à jour des documents et enfin rechercher les documents créés..

J'espère que vous vous sentez maintenant à l'aise avec Mongoose. Si vous souhaitez en savoir plus, je vous suggère de consulter les guides Mongoose, qui abordent des sujets plus avancés tels que la population, les intergiciels, les promesses, etc..

Bonne chasse (référence pauvre de mangouste)!