Recherche…


Introduction

MongoDB est l'une des bases de données NoSQL les plus populaires, grâce à la pile MEAN. L'interfaçage avec une base de données Mongo à partir d'une application Express est rapide et facile, une fois que vous avez compris la syntaxe de requête kinda-wonky. Nous allons utiliser Mongoose pour nous aider.

Remarques

Plus d'informations peuvent être trouvées ici: http://mongoosejs.com/docs/guide.html

Installation de MongoDB

npm install --save mongodb
npm install --save mongoose //A simple wrapper for ease of development

Dans votre fichier serveur (normalement nommé index.js ou server.js)

const express = require('express');
const mongodb = require('mongodb');
const mongoose = require('mongoose');
const mongoConnectString = 'http://localhost/database name';

mongoose.connect(mongoConnectString, (err) => {
  if (err) {
    console.log('Could not connect to the database');
  }
});

Créer un modèle Mongoose

const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;

const Article = new Schema({
  title: {
    type: String,
    unique: true,
    required: [true, 'Article must have title']
  },
  author: {
    type: ObjectId,
    ref: 'User'
  }
});

module.exports = mongoose.model('Article, Article);

Disséquons ceci. MongoDB et Mongoose utilisent JSON (en fait BSON, mais ce n'est pas pertinent ici) comme format de données. En haut, j'ai défini quelques variables pour réduire la saisie.

Je crée un new Schema et l'assigne à une constante. C'est simple JSON, et chaque attribut est un autre objet avec des propriétés qui aident à appliquer un schéma plus cohérent. Unique oblige les nouvelles instances insérées dans la base de données à être évidemment uniques. Cela est idéal pour empêcher un utilisateur de créer plusieurs comptes sur un service.

Required est un autre, déclaré comme un tableau. Le premier élément est la valeur booléenne et le second le message d'erreur si la valeur insérée ou mise à jour n'existe pas.

Les ObjectIds sont utilisés pour les relations entre les modèles. Des exemples pourraient être «Les utilisateurs ont beaucoup de commentaires». D'autres attributs peuvent être utilisés à la place d'ObjectId. Les chaînes comme un nom d'utilisateur sont un exemple.

Enfin, l'exportation du modèle pour l'utiliser avec vos routes API vous permet d'accéder à votre schéma.

Interroger votre base de données Mongo

Une simple requête GET. Supposons que le modèle de l'exemple ci-dessus se trouve dans le fichier ./db/models/Article.js .

const express = require('express');
const Articles = require('./db/models/Article');

module.exports = function (app) {
  const routes = express.Router();
  
  routes.get('/articles', (req, res) => {
    Articles.find().limit(5).lean().exec((err, doc) => {
      if (doc.length > 0) {
        res.send({ data: doc });
      } else {
        res.send({ success: false, message: 'No documents retrieved' });
      }
    });
  });

app.use('/api', routes);
};

Nous pouvons maintenant obtenir les données de notre base de données en envoyant une requête HTTP à ce noeud final. Quelques points clés cependant:

  1. La limite fait exactement ce à quoi elle ressemble. Je ne récupère que 5 documents.
  2. Lean retire certains éléments du BSON brut, réduisant ainsi la complexité et les frais généraux. Non requis. Mais utile
  3. Lorsque vous utilisez find au lieu de findOne , confirmez que doc.length est supérieur à 0. En effet, find retourne toujours un tableau, donc un tableau vide ne gérera pas votre erreur, sauf si sa longueur est vérifiée.
  4. Personnellement, j'aime envoyer le message d'erreur dans ce format. Changez-le selon vos besoins. Même chose pour le document retourné.
  5. Le code dans cet exemple est écrit sous l'hypothèse que vous l'avez placé dans un autre fichier et non directement sur le serveur express. Pour appeler cela sur le serveur, incluez ces lignes dans le code de votre serveur:
const app = express();
require('./path/to/this/file')(app) // 


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow