Suche…


Einführung

MongoDB ist dank der Hilfe des MEAN-Stacks eine der beliebtesten NoSQL-Datenbanken. Die Schnittstelle zu einer Mongo-Datenbank von einer Express-App aus ist schnell und einfach, sobald Sie die irgendwie verständliche Abfragesyntax verstanden haben. Wir werden Mongoose benutzen, um uns zu helfen.

Bemerkungen

Weitere Informationen finden Sie hier: http://mongoosejs.com/docs/guide.html

MongoDB installieren

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

In Ihrer Server-Datei (normalerweise index.js oder 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');
  }
});

Erstellen eines Mungo-Modells

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);

Lassen Sie uns das analysieren. MongoDB und Mongoose verwenden als Datenformat JSON (eigentlich BSON, das ist hier jedoch irrelevant). Oben habe ich ein paar Variablen gesetzt, um das Tippen zu reduzieren.

Ich erstelle ein new Schema und ordne es einer Konstanten zu. Es ist ein einfaches JSON, und jedes Attribut ist ein anderes Objekt mit Eigenschaften, die dazu beitragen, ein konsistenteres Schema durchzusetzen. Unique zwingt neue Instanzen, die in die Datenbank eingefügt werden, eindeutig zu sein. Dies ist ideal, um zu verhindern, dass ein Benutzer mehrere Konten für einen Dienst erstellt.

Erforderlich ist ein anderes, als Array deklariert. Das erste Element ist der boolesche Wert und das zweite Element die Fehlermeldung, falls der Wert, der eingefügt oder aktualisiert wird, nicht vorhanden ist.

ObjectIds werden für Beziehungen zwischen Modellen verwendet. Beispiele sind "Benutzer haben viele Kommentare". Andere Attribute können anstelle von ObjectId verwendet werden. Zeichenfolgen wie ein Benutzername sind ein Beispiel.

Wenn Sie das Modell zur Verwendung mit Ihren API-Routen exportieren, können Sie auf Ihr Schema zugreifen.

Abfragen Ihrer Mongo-Datenbank

Eine einfache GET-Anfrage. Nehmen wir an, das Modell aus dem obigen Beispiel befindet sich in der Datei ./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);
};

Wir können die Daten jetzt aus unserer Datenbank abrufen, indem Sie eine HTTP-Anforderung an diesen Endpunkt senden. Einige wichtige Dinge jedoch:

  1. Limit macht genau so, wie es aussieht. Ich bekomme nur 5 Dokumente zurück.
  2. Lean entledigt sich dem rohen BSON und reduziert so die Komplexität und den Overhead. Nicht benötigt. Aber nützlich
  3. Wenn Sie find anstelle von findOne , findOne , dass doc.length größer als 0 ist. Dies ist darauf zurückzuführen, dass find immer ein Array zurückgibt. Ein leeres Array wird also Ihren Fehler nur behandeln, wenn er auf Länge geprüft wird
  4. Ich persönlich schicke die Fehlermeldung gerne in diesem Format. Ändern Sie es nach Ihren Bedürfnissen. Gleiches für das zurückgegebene Dokument.
  5. Der Code in diesem Beispiel wird unter der Annahme geschrieben, dass Sie ihn in einer anderen Datei und nicht direkt auf dem Express-Server gespeichert haben. Um dies auf dem Server aufzurufen, fügen Sie diese in Ihren Servercode ein:
const app = express();
require('./path/to/this/file')(app) // 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow