Fermer

mai 28, 2018

Une introduction à MongoDB –


MongoDB est un programme de base de données NoSQL open source orienté document. Si vous avez longtemps été impliqué dans les bases de données relationnelles traditionnelles, l'idée d'une base de données NoSQL orientée document peut en effet sembler particulière. "Comment une base de données peut-elle ne pas avoir de tables?", Pourrait-on se demander. Ce tutoriel vous présente certains des concepts de base de MongoDB et devrait vous aider à démarrer même si vous avez une expérience très limitée avec un système de gestion de base de données

Qu'est-ce que MongoDB?

Voici la documentation officielle a à dire sur MongoDB.

MongoDB est une base de données open-source développée par MongoDB Inc. qui est évolutive et flexible. MongoDB stocke les données dans des documents de type JSON dont la structure peut varier.

Évidemment, MongoDB est un système de base de données. Mais pourquoi avons-nous besoin d'une autre option de base de données quand les solutions existantes sont peu coûteuses et réussies? Un système de base de données relationnelle comme MySQL ou Oracle a des tables, et chaque table a un nombre de lignes et de colonnes. MongoDB, étant un système de base de données orienté document, ne les possède pas. Au lieu de cela, il a une structure de document semblable à JSON qui est flexible et facile à travailler. Voici un exemple de ce à quoi ressemble un document MongoDB:

 {
   "_id": ObjectId (3da252d3902a),
   "type": "Article",
   "title": "Tutorial MongoDB Partie Un",
   "description": "Premier document",
   "auteur": "Manjunath",
   "content": "C'est un ..."
}
{
   "_id": ObjectId (8da21ea3902a),
   "type": "Article",
   "title": "Didacticiel MongoDB Deuxième partie",
   "description": "Deuxième document",
   "auteur": "Manjunath",
   "contenu": "Dans la seconde ..."
}

Un document dans une base de données NoSQL correspond à une ligne dans une base de données SQL. Un ensemble de documents est connu sous le nom de collection qui est à peu près synonyme d'une table dans une base de données relationnelle. Pour un aperçu approfondi des bases de données NoSQL et SQL et de leurs différences, nous avons couvert cela dans le tutoriel SQL vs NoSQL .

En plus d'être une base de données NoSQL, MongoDB a quelques qualités de posséder. J'ai énuméré quelques-unes de ses principales caractéristiques ci-dessous:

  • il est facile à installer et configurer
  • il utilise un BSON (un format JSON) pour stocker des données
  • il est facile de mapper les objets document à votre code d'application
  • il prétend être hautement évolutif et disponible, et inclut le support pour la réplication prête à l'emploi
  • il supporte les opérations MapReduce pour condenser un grand volume de données en résultats agrégés utiles
  • c'est gratuit et open source.

MongoDB semble dépasser les limites des anciennes bases de données relationnelles et des bases de données NoSQL. Si vous n'êtes pas encore convaincu de la raison pour laquelle c'est utile, consultez notre article sur Choisir entre SQLSQL et SQL .

Allons de l'avant et installons MongoDB

Installation de MongoDB

Installation de MongoDB facile et il ne nécessite pas beaucoup de configuration ou d'installation. MongoDB est pris en charge par toutes les principales plates-formes et distributions, et vous pouvez consulter leur documentation en cas de doute.

J'ai couvert les instructions pour installer MongoDB sur macOS ci-dessous.
Pour Linux, MongoDB recommande d'installer le logiciel avec l'aide du gestionnaire de paquets de votre distribution . Si vous utilisez Windows, il est aussi simple que de télécharger la dernière version à partir du site Web MongoDB et d'exécuter le programme d'installation interactif

Installation de MongoDB sur macOS avec Homebrew

Homebrew est un gestionnaire de paquets pour macOS, et ce tutoriel suppose que vous avez déjà installé Homebrew sur votre machine.

  1. Ouvrez l'application du terminal et exécutez
 $ update
  1. Une fois l'infusion mise à jour, installez le paquet mongodb comme suit:
 $ brew install mongodb
  1. Créez un répertoire de données afin que le processus mongod puisse écrire des données. Par défaut, le répertoire est / data / db :

     `` `bash
    $ mkdir -p / data / db
    `` `
     
  2. Assurez-vous que votre compte utilisateur est autorisé à lire et à écrire des données dans ce répertoire:

     `` `bash
    $ sudo chown -R `id -un` / données / db
    & gt; # Tapez votre mot de passe
    `` `
     
  3. Initier le serveur mongo. Exécutez la commande mongod pour démarrer le serveur.

  4. Démarrez le shell Mongo. Ouvrez une autre fenêtre de terminal et exécutez mongo . Le shell mongo va essayer de se connecter au démon mongo que nous avons initié plus tôt. Une fois que vous êtes connecté avec succès, vous pouvez utiliser le shell comme terrain de jeu pour exécuter toutes vos commandes en toute sécurité.

  5. Quittez le shell Mongo en exécutant quit () et le démon mongo en appuyant sur contrôle + C .

Maintenant que nous avons le démon mongo en cours d'exécution, familiarisons-nous avec les bases de MongoDB

Basic Database Operations

Entrez le shell Mongo si vous ne l'avez pas déjà fait:

[mj@localhost ~] $ mongo
Version de shell MongoDB v3.6.1
connexion à: mongodb: //127.0.0.1: 27017
Version du serveur MongoDB: 3.6.1

se connecter à: test

Vous pouvez voir ma version du shell MongoDB lorsque vous vous connectez. Par défaut, vous êtes connecté à une base de données de test. Vous pouvez vérifier le nom de la base de données en cours en exécutant db :

 & gt; db
tester

C'est génial, mais si nous voulons une nouvelle base de données? Pour créer une base de données, MongoDB a une commande use DATABASE_NAME :

 & gt; use exampledb
commuté à db exampledb

Pour afficher toutes les bases de données existantes, essayez show dbs :

 & gt; show dbs

local 0,078GB
prototype 0.078GB
test 0.078GB

Le exampledb ne figure pas dans la liste car nous devons insérer au moins un document dans la base de données. Pour insérer un document, vous pouvez faire db.COLLECTION_NAME.insertOne ({"key": "value"}) . Voici un exemple:

 & gt; db.users.insertOne ({'nom': 'Bob'})
{
   "reconnu": vrai,
   "insertedId": ObjectId ("5a52c53b223039ee9c2daaec")
}

MongoDB crée automatiquement une nouvelle collection users et insère un document avec la paire clé-valeur 'name': 'Bob' . L'ObjectId renvoyé est l'ID du document inséré. MongoDB crée un ObjectId unique pour chaque document à la création et devient la valeur par défaut du champ _id :

 & gt; show dbs
Exemple 0.078GB
local 0,078GB
prototype 0.078GB
test 0.078GB

De même, vous pouvez confirmer que la collection a été créée à l'aide de la commande show collections :

 & gt; montrer les collections
utilisateurs

Nous avons créé une base de données, ajouté une collection nommée users et y avons inséré un document. Maintenant, essayons de le laisser tomber. Pour supprimer une base de données existante, utilisez la commande dropDatabase () comme illustré ci-dessous:

 & gt; db.dropDatabase ()
{"ok": 1}

show dbs confirme que la base de données a bien été supprimée.

> show dbs
local 0,078GB
prototype 0.078GB
test 0.078GB

Pour plus d'opérations de base de données, voir la page de référence MongoDB sur Commandes de base de données

MongoDB CRUD Operations

Comme vous le savez peut-être, l'acronyme CRUD signifie Créer, Lire, Mettre à jour et Supprimer . Ce sont les quatre opérations de base de données de base que vous ne pouvez pas éviter lors de la création d'une application. Par exemple, toute application moderne aura la possibilité de créer un nouvel utilisateur, de lire les données utilisateur, de mettre à jour les informations utilisateur et, si nécessaire, de supprimer le compte utilisateur. Exécutons ceci au niveau de la base de données en utilisant MongoDB.

Create Operation

La ​​création est la même que en insérant un document dans une collection. Dans la section précédente, nous avions inséré un seul document en utilisant la syntaxe db.collection.insertOne () . Il existe une autre méthode appelée db.collection.insertMany () qui vous permet d'insérer plusieurs documents à la fois. Voici la syntaxe:

 & gt; db.COLLECTION_NAME.insertMany (
   [ <document 1> , <document 2>, ... ]
   )

Créons une collection users et la peuplons avec des utilisateurs réels:

 & gt; db.users.insertMany ([
   { "name": "Tom","age":33, "email": "tom@example.com" },
   { "name":"Bob", "age":35, "email":"bob@example.com" },
   { "name": "Kate", "age": 27, "email": "kate@example.com" },
   { "name": "Watson", "age":15, "email":"watson@example.com"}
])

{
   "reconnu": vrai,
   "insertedIds": [
      ObjectId("5a52cb2451dd8b08d5a22cf5"),
      ObjectId("5a52cb2451dd8b08d5a22cf6"),
      ObjectId("5a52cb2451dd8b08d5a22cf7"),
      ObjectId("5a52cb2451dd8b08d5a22cf8")
   ]
}

La ​​méthode insertMany accepte un tableau d'objets et, en retour, nous obtenons un tableau de ObjectId s.

Opération de lecture

L'opération de lecture est utilisée pour récupère un document ou plusieurs documents d'une collection. La syntaxe de l'opération de lecture est la suivante:

 & gt; db.collection.find (requête, projection)

Pour récupérer tous les documents utilisateur, vous pouvez le faire:

 & gt; db.users.find (). pretty ()
{
   "_id": ObjectId ("5a52cb2451dd8b08d5a22cf5"),
   "nom": "Tom",
   "âge": 33,
   "email": "tom@example.com"
}
{
   "_id": ObjectId ("5a52cb2451dd8b08d5a22cf6"),
   "nom": "Bob",
   "âge": 35,
   "email": "bob@example.com"
}
{
   "_id": ObjectId ("5a52cb2451dd8b08d5a22cf7"),
   "nom": "Kate",
   "âge": 27,
   "email": "kate@example.com"
}
{
   "_id": ObjectId ("5a52cb2451dd8b08d5a22cf8"),
   "nom": "Watson",
   "âge": 15,
   "email": "watson@example.com"
}

Ceci correspond à la requête SELECT * FROM USERS d'une base de données SQL

La jolie méthode est une méthode de curseur, et il y en a beaucoup d'autres aussi. Vous pouvez chaîner ces méthodes pour modifier votre requête et les documents renvoyés par la requête.

Que faire si vous avez besoin de filtrer des requêtes et de renvoyer un sous-ensemble de la collection? Dites, trouver tous les utilisateurs qui sont au-dessous de 30. Vous pouvez modifier la requête comme ceci:

 & gt; db.users.find ({"age": {$ lt: 30}})
{"_id": ObjectId ("5a52cb2451dd8b08d5a22cf7"), "nom": "Kate", "âge": 27, "email": "kate@example.com"}
{"_id": ObjectId ("5a52cb2451dd8b08d5a22cf8"), "nom": "Watson", "age": 15, "email": "watson@example.com"}

$ lt est un opérateur de filtre de requête qui sélectionne les documents dont la valeur du champ age est inférieure à 30. Il existe de nombreux filtres de comparaison et de requête logiques disponibles. dans la documentation du sélecteur de requêtes .

Opération de mise à jour

L'opération de mise à jour modifie le document dans une collection. Similaire à l'opération de création, MongoDB propose deux méthodes de mise à jour d'un document. Ce sont:

  1. db.collection.updateMany (filtre, mise à jour, options)
  2. db.collection.updateMany (filtre, mise à jour, options) .

Si vous devez ajouter un champ supplémentaire, disons inscription à tous les documents existants dans une collection, vous pouvez faire quelque chose comme ceci:

 & gt; db.users.updateMany ({}, {$ set: {'registration': 'incomplete'}})
{"acquitté": true, "matchedCount": 4, "modifiedCount": 4}

Le premier argument est un objet vide car nous voulons mettre à jour tous les documents de la collection. L'ensemble $ est un opérateur de mise à jour qui définit la valeur d'un champ avec la valeur spécifiée. Vous pouvez vérifier que le champ supplémentaire a été ajouté en utilisant db.users.find () .

Pour mettre à jour la valeur des documents qui correspondent à certains critères, updateMany () accepte un filtre objet comme premier argument. Par exemple, vous pouvez remplacer la valeur de l'enregistrement par complète pour tous les utilisateurs âgés de 18 ans et plus. Voici ce que vous pouvez faire:

 & gt; db.users.updateMany (
  {'age': {$ gt: 18}},
  {$ set: {'registration': 'complete'}
})

{"acquitté": true, "matchedCount": 3, "modifiedCount": 3}

Pour mettre à jour les détails d'enregistrement d'un seul utilisateur, vous pouvez le faire:

 & gt; db.users.updateOne (
 {'email': 'watson@example.com'},
 {$ set: {'registration': 'complete'}
})

{"accepted": true, "matchedCount": 1, "modifiedCount": 1}

Supprimer l'opération

L'opération de suppression supprime un document de la collection. Pour supprimer un document, vous pouvez utiliser la méthode db.collection.deleteOne (filter, options) et pour supprimer plusieurs documents, vous pouvez utiliser db.collection.deleteMany (filter, options) méthode.

Pour supprimer des documents en fonction de certains critères, vous pouvez utiliser les opérateurs de filtre que nous avons utilisés pour les opérations de lecture et de mise à jour:

 db.users.deleteMany ({status: {$ in: [ "dormant", "inactive" ]}})

{"reconnu": true, "deletedCount": 1}

Cela supprime tous les documents avec un statut "dormant" ou "inactif"

C'est tout.

Un aperçu des pilotes MongoDB

Pour une application pour communiquer avec le serveur mongodb, vous devez utilisez une bibliothèque côté client appelée un pilote . Le pilote se trouve au sommet du serveur de base de données et vous permet d'interagir avec la base de données à l'aide de l'API du pilote. MongoDB a des pilotes officiels et tiers pour tous les langages et environnements populaires.

Dans ce tutoriel, nous allons examiner nos options pour les pilotes de Node.js. Certains pilotes ajoutent beaucoup de bonnes fonctionnalités, comme le support du schéma et la validation de la logique métier, et vous pouvez choisir celui qui correspond à votre style. Les pilotes populaires pour Node.js incluent le pilote MongoDB natif et Mongoose. Je vais discuter brièvement de leurs caractéristiques ici.

MongoDB Pilote Node.js

Ceci est le pilote officiel MongoDB pour Node.js . Le pilote peut interagir avec la base de données en utilisant des promesses ou des rappels, et prend également en charge les fonctions async / await de ES6. L'exemple ci-dessous illustre la connexion du pilote au serveur:

 const MongoClient = require ('mongodb'). MongoClient;
const assert = require ('assert');

 // URL de connexion
  const url = 'mongodb: // localhost: 27017 / exampledb';
 // Nom de la base de données
  const dbName = 'examplepledb';

(async function () {

  laisser le client;

  essayez {
    // Tente de se connecter au serveur
    client = attend MongoClient.connect (url);

    console.log ("Connexion avec succès au serveur.");

    const db = client.db (nombd);
  } catch (err) {
   // Consigne les erreurs dans la console
    console.log (err.stack);
  }

  if (client) {
    client.close ();
  }
}) ();

Le MongoClient.connect renvoie une promesse et toute erreur est interceptée par le bloc [ try ... catch . Vous allez implémenter les actions CRUD dans le bloc try ... catch et l'API pour cela est similaire à ce que nous avons couvert dans ce tutoriel. Vous pouvez en lire plus à ce sujet dans la page de documentation officielle

Pilote Mongoose

Un autre pilote Node.js populaire pour MongoDB est Mongoose . Mongoose est construit sur le pilote officiel MongoDB. À l'époque où Mongoose a été lancé, il avait des tonnes de fonctionnalités que le pilote MongoDB natif n'avait pas. Une caractéristique importante était la possibilité de définir une structure de schéma qui serait mappée sur la collection de la base de données. Cependant, les dernières versions de MongoDB ont adopté certaines de ces fonctionnalités sous la forme de schéma JSON et de validation de schéma.

Outre le schéma, d'autres fonctionnalités de Mongoose incluent Models, Validators et middlewares, peuplent méthode, plugins et ainsi de suite. Vous pouvez en lire plus à ce sujet dans les documents Mongoose. Voici un exemple pour démontrer mongoose.connect () pour se connecter à la base de données:

 var mongoose = require ('mongoose');

// URL de connexion
  const url = 'mongodb: // localhost: 27017 / exampledb';

mongoose.connect (url);

var db = mongoose.connection;

db.on ('erreur',
console.error.bind (console, 'erreur de connexion:'));
db.once ('open', function () {
  // nous sommes connectés!
});

Conclusion

MongoDB est une solution de base de données NoSQL populaire qui répond aux exigences de développement modernes. Dans ce tutoriel, nous avons couvert les bases de MongoDB, le shell Mongo et quelques-uns des pilotes disponibles. Nous avons également exploré les opérations de base de données communes et les actions CRUD dans le shell Mongo. Maintenant il est temps pour vous de sortir et d'essayer ce que nous avons couvert ici et plus encore. Si vous voulez en savoir plus, je vous recommande de créer une API REST avec MongoDB et Node pour vous familiariser avec les opérations et les méthodes de base de données communes.




Source link