Eine Einführung in Mongoose für MongoDB und Node.js

Mongoose ist ein JavaScript-Framework, das üblicherweise in einer Node.js-Anwendung mit einer MongoDB-Datenbank verwendet wird. In diesem Artikel werde ich Ihnen Mongoose und MongoDB vorstellen und noch wichtiger, wo diese Technologien in Ihre Anwendung passen.

Was ist MongoDB??

Beginnen wir mit MongoDB. MongoDB ist eine Datenbank, in der Ihre Daten als Dokumente gespeichert werden. Meist ähneln diese Dokumente einer JSON-ähnlichen Struktur:

Vorname: "Jamie", Nachname: "Munro"

Ein Dokument wird dann in einer Sammlung abgelegt. Als Beispiel definiert das obige Dokumentbeispiel a Nutzer Objekt. Diese Nutzer Das Objekt wäre dann normalerweise Teil einer aufgerufenen Sammlung Benutzer.

Ein wesentlicher Faktor bei MongoDB ist die Flexibilität in Bezug auf die Struktur. Obwohl im ersten Beispiel die Nutzer Objekt enthielt ein Vorname und Nachname Eigenschaft, sind diese Eigenschaften nicht in jedem erforderlich Nutzer Dokument, das Teil der Benutzer Sammlung. Dies unterscheidet MongoDB von einer SQL-Datenbank wie MySQL oder Microsoft SQL Server, für die ein stark definiertes Datenbankschema für jedes gespeicherte Objekt erforderlich ist.

Bei der Erstellung dynamischer Objekte, die als Dokumente in der Datenbank gespeichert sind, kommt Mongoose ins Spiel.

Was ist Mungo??

Mongoose ist ein Object Document Mapper (ODM). Dies bedeutet, dass Sie mit Mongoose Objekte mit einem stark typisierten Schema definieren können, das einem MongoDB-Dokument zugeordnet ist.

Mongoose bietet eine unglaubliche Menge an Funktionen zum Erstellen und Arbeiten mit Schemas. Mongoose enthält derzeit acht SchemaTypes, unter denen eine Eigenschaft gespeichert wird, wenn sie in MongoDB beibehalten wird. Sie sind:

  1. String
  2. Nummer
  3. Datum
  4. Puffer
  5. Boolean
  6. Gemischt
  7. Objekt Identifikation
  8. Array

Für jeden Datentyp können Sie Folgendes angeben:

  • ein Standardwert
  • eine benutzerdefinierte Validierungsfunktion
  • zeigt an, dass ein Feld erforderlich ist
  • eine Get-Funktion, mit der Sie die Daten bearbeiten können, bevor sie als Objekt zurückgegeben werden
  • eine Set-Funktion, mit der Sie die Daten bearbeiten können, bevor sie in der Datenbank gespeichert werden
  • Erstellen Sie Indizes, damit Daten schneller abgerufen werden können

Zusätzlich zu diesen allgemeinen Optionen können Sie mit bestimmten Datentypen die Art und Weise, wie die Daten gespeichert und aus der Datenbank abgerufen werden, weiter anpassen. Zum Beispiel a String Mit dem Datentyp können Sie auch die folgenden zusätzlichen Optionen angeben:

  • konvertieren Sie es in Kleinbuchstaben
  • konvertieren Sie es in Großbuchstaben
  • Daten vor dem Speichern abschneiden
  • ein regulärer Ausdruck, der Daten einschränken kann, die während des Validierungsprozesses gespeichert werden dürfen
  • Eine Aufzählung, die eine Liste gültiger Zeichenfolgen definieren kann

Das Nummer und Datum Beide Eigenschaften unterstützen die Angabe eines Mindest- und Höchstwerts, der für dieses Feld zulässig ist.

Die meisten der acht zulässigen Datentypen sollten Ihnen bekannt sein. Es gibt jedoch einige Ausnahmen, die zu Ihnen springen können, wie z Puffer, Gemischt, Objekt Identifikation, und Array.

Das Puffer Datentyp ermöglicht das Speichern von binären Daten. Ein typisches Beispiel für binäre Daten wäre ein Bild oder eine codierte Datei, beispielsweise ein PDF-Dokument.

Das Gemischt Der Datentyp verwandelt die Eigenschaft in ein Feld "Alles geht". Dieses Feld ähnelt der Anzahl der Entwickler, die MongoDB verwenden können, da keine definierte Struktur vorhanden ist. Seien Sie vorsichtig bei der Verwendung dieses Datentyps, da viele der großartigen Funktionen, die Mongoose bietet, verloren gehen, wie z. B. Datenüberprüfung und Erkennen von Entitätenänderungen, die beim Speichern der Eigenschaft automatisch erkannt werden, um die Eigenschaft zu aktualisieren.

Das Objekt Identifikation Der Datentyp gibt im Allgemeinen eine Verknüpfung zu einem anderen Dokument in Ihrer Datenbank an. Wenn Sie beispielsweise über eine Sammlung von Büchern und Autoren verfügen, enthält das Buchdokument möglicherweise eine Objekt Identifikation Eigenschaft, die auf den jeweiligen Autor des Dokuments verweist.

Das Array Datentyp ermöglicht das Speichern von JavaScript-ähnlichen Arrays. Mit einem Array-Datentyp können Sie gängige JavaScript-Array-Vorgänge wie Push, Pop, Shift, Slice usw. ausführen.

Schneller Überblick

Bevor wir weitermachen und Code generieren, wollte ich nur das, was wir gerade gelernt haben, zusammenfassen. MongoDB ist eine Datenbank, in der Sie Dokumente mit dynamischer Struktur speichern können. Diese Dokumente werden in einer Sammlung gespeichert.

Mongoose ist eine JavaScript-Bibliothek, mit der Sie Schemas mit stark typisierten Daten definieren können. Sobald ein Schema definiert ist, können Sie mit Mongoose ein Modell erstellen, das auf einem bestimmten Schema basiert. Ein Mongoose-Modell wird dann über die Schemadefinition des Modells einem MongoDB-Dokument zugeordnet.

Nachdem Sie Ihre Schemata und Modelle definiert haben, enthält Mongoose viele verschiedene Funktionen, mit denen Sie Ihre Daten mithilfe gängiger MongoDB-Funktionen überprüfen, speichern, löschen und abfragen können. Ich werde mehr darüber mit den folgenden konkreten Codebeispielen sprechen.

MongoDB installieren

Bevor wir mit der Erstellung unserer Mongoose-Schemata und -Modelle beginnen können, muss MongoDB installiert und konfiguriert sein. Ich würde empfehlen, die Download-Seite von MongoDB zu besuchen. Für die Installation stehen verschiedene Optionen zur Verfügung. Ich habe eine Verbindung zum Community Server hergestellt. Auf diese Weise können Sie eine für Ihr Betriebssystem spezifische Version installieren. MongoDB bietet auch einen Enterprise Server und eine Cloud-Support-Installation an. Da ganze Bücher über das Installieren, Optimieren und Überwachen von MongoDB geschrieben werden könnten, bleibe ich beim Community Server.

Nachdem Sie MongoDB für Ihr Betriebssystem Ihrer Wahl heruntergeladen und installiert haben, müssen Sie die Datenbank starten. Anstatt das Rad neu zu erfinden, schlage ich vor, die Dokumentation von MongoDB zur Installation der MongoDB Community Edition zu besuchen.

Ich warte hier, während Sie MongoDB konfigurieren. Wenn Sie bereit sind, können Sie Mongoose einrichten, um eine Verbindung zu Ihrer neu installierten MongoDB-Datenbank herzustellen.

Mungo einrichten

Mongoose ist ein JavaScript-Framework, und ich werde es in einer Node.js-Anwendung verwenden. Wenn Sie bereits Node.js installiert haben, können Sie mit dem nächsten Schritt fortfahren. Wenn Sie Node.js nicht installiert haben, sollten Sie zunächst die Seite Node.js herunterladen und das Installationsprogramm für Ihr Betriebssystem auswählen.

Wenn Node.js eingerichtet und betriebsbereit ist, werde ich eine neue Anwendung erstellen und dann das Mongoose NPM-Paket installieren.

Mit einer Eingabeaufforderung, an der Sie die Installation Ihrer Anwendung wünschen, können Sie die folgenden Befehle ausführen:

mkdir mongoose_basics cd mongoose_basics npm init

Für die Initialisierung meiner Anwendung habe ich alles als Standardwert belassen. Nun werde ich das Mungo-Paket wie folgt installieren:

npm install mongoose --save

Nachdem alle Voraussetzungen konfiguriert sind, verbinden wir uns mit einer MongoDB-Datenbank. Ich habe den folgenden Code in eine index.js-Datei eingefügt, weil ich diesen als Ausgangspunkt für meine Anwendung ausgewählt habe:

var Mungo = Anfordern ('Mungo'); mongoose.connect ('mongodb: // localhost / mongoose_basics');

Die erste Codezeile enthält die Mungo Bibliothek. Als Nächstes öffne ich eine Verbindung zu einer Datenbank, die ich angerufen habe mongoose_basics Verwendung der verbinden Funktion.

Das verbinden Die Funktion akzeptiert zwei weitere optionale Parameter. Der zweite Parameter ist ein Objekt mit Optionen, in dem Sie bei Bedarf Dinge wie Benutzername und Kennwort definieren können. Der dritte Parameter, der auch der zweite Parameter sein kann, wenn Sie keine Optionen haben, ist die Callback-Funktion nach dem Verbindungsaufbau. Die Rückruffunktion kann auf zwei Arten verwendet werden:

mongoose.connect (URI, Optionen, Funktion (Fehler) // Fehler bei der ursprünglichen Verbindung prüfen. Es gibt keinen 2. Parameter für den Rückruf.); // Oder mit Versprechungen mongoose.connect (uri, options) .then (() => / ** bereit zur Verwendung. Das 'mongoose.connect ()' - Versprechen wird in undefined aufgelöst. * /, Err => / ** anfänglicher Verbindungsfehler behandeln * /);

Um eine mögliche Einführung in JavaScript Promises zu vermeiden, werde ich den ersten Weg verwenden. Unten befindet sich eine aktualisierte index.js-Datei:

var Mungo = Anfordern ('Mungo'); mongoose.connect ('mongodb: // localhost / mongoose_basics'), function (err) if (err) werfen err; console.log ('Erfolgreich verbunden'););

Wenn beim Herstellen der Verbindung zur Datenbank ein Fehler auftritt, wird die Ausnahme ausgelöst und die weitere Verarbeitung wird gestoppt. Wenn kein Fehler auftritt, habe ich eine Erfolgsmeldung an der Konsole protokolliert.

Mongoose ist nun eingerichtet und mit einer Datenbank verbunden mongoose_basics. Meine MongoDB-Verbindung verwendet keinen Benutzernamen, Kennwort oder benutzerdefinierten Port. Wenn Sie diese Optionen oder eine andere Option während der Verbindung einstellen müssen, schlage ich vor, die Mongoose-Dokumentation beim Verbinden zu überprüfen. Die Dokumentation enthält ausführliche Erklärungen zu den vielen verfügbaren Optionen sowie zum Erstellen mehrerer Verbindungen, zum Verbindungspooling, zu Replikaten usw.

Bei einer erfolgreichen Verbindung wollen wir ein Mongoose-Schema definieren.

Definieren eines Mungo-Schemas

Während der Einführung zeigte ich eine Nutzer Objekt, das zwei Eigenschaften enthielt: Vorname und Nachname. Im folgenden Beispiel habe ich dieses Dokument in ein Mongoose-Schema übersetzt:

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

Dies ist ein sehr einfaches Schema, das nur zwei Eigenschaften enthält, denen keine Attribute zugeordnet sind. Lassen Sie uns dieses Beispiel erweitern, indem Sie die Eigenschaften von Vor- und Nachname in untergeordnete Objekte von a konvertieren Name Eigentum. Das Name Die Eigenschaft umfasst sowohl den Vor- als auch den Nachnamen. Ich werde auch eine hinzufügen erstellt Eigenschaft, die vom Typ ist Datum.

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

Wie Sie sehen, erlaubt Mongoose mir die Erstellung sehr flexibler Schemata mit vielen verschiedenen möglichen Kombinationen, wie ich meine Daten organisieren kann.

In diesem nächsten Beispiel werde ich zwei neue Schemas erstellen, die zeigen, wie eine Beziehung zu einem anderen Schema erstellt wird: Autor und Buch. Das Buch Schema enthält einen Verweis auf die Autor Schema.

var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, name: firstName: String, lastName: String, Biografie: String, twitter: String, facebook: String, linkedin: String, profilePuffer, erstellt: Typ: Date, Standard: Date.now);

Oben ist das Autor Schema, das die Konzepte des Nutzer Schema, das ich im vorherigen Beispiel erstellt habe. Um den Autor und das Buch miteinander zu verknüpfen, wird die erste Eigenschaft von Autor Schema ist ein _Ich würde Eigenschaft, die ein ist Objekt Identifikation Schematyp. _Ich würde ist die gebräuchlichste Syntax zum Erstellen eines Primärschlüssels in Mongoose und MongoDB. Dann wie das Nutzer Schema, ich habe ein definiert Name Eigenschaft, die den Vor- und Nachnamen des Autors enthält. 

Erweiterung auf die Nutzer Schema, das Autor enthält mehrere andere String Schematypen. Ich habe auch ein hinzugefügt Puffer Schematyp, der das Profilbild des Autors enthalten kann. Die endgültige Eigenschaft enthält das Erstellungsdatum des Autors. Sie stellen jedoch möglicherweise fest, dass es etwas anders erstellt wird, da es einen Standardwert von "jetzt" definiert hat. Wenn ein Autor in der Datenbank gespeichert ist, wird diese Eigenschaft auf das aktuelle Datum und die aktuelle Uhrzeit gesetzt.

Um die Schemabeispiele abzuschließen, erstellen Sie eine Buch Schema, das einen Verweis auf den Autor enthält Objekt Identifikation Schematyp:

var bookSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, Titel: String, Zusammenfassung: String, isbn: String, Miniatur: Puffer, Autor: Typ: mongoose.Schema.Types.ObjectId, ref: ' Autor ', Bewertungen: [Zusammenfassung: String, Detail: String, AnzahlOfStars: Anzahl, Erstellt: Typ: Datum, Standardwert: Date.now], erstellt: Typ: Datum, Standardwert: Datum.now );

Das Buch Schema enthält mehrere Eigenschaften des Typs String. Wie oben erwähnt, enthält es einen Hinweis auf die Autor Schema. Zur weiteren Veranschaulichung der leistungsfähigen Schemadefinitionen können Sie die Buch Schema enthält auch ein Array von Bewertungen. Jede Bewertung besteht aus einem Zusammenfassung, Detail, numberOfStars, und erstellt Datumseigenschaft.

Mongoose bietet Ihnen die Flexibilität, Schemas mit Verweisen auf andere Schemas oder wie im obigen Beispiel mit dem zu erstellen Bewertungen Eigenschaft, ermöglicht es Ihnen, eine Array von untergeordneten Eigenschaften, die in einem verwandten Schema (wie Buch zu Autor) enthalten sein könnten, oder Inline wie im obigen Beispiel (mit Buch zu Bewertungen) Array).

Mongoose-Modelle erstellen und speichern

Seit der Autor und Buch Schemas demonstrieren die Flexibilität von Mongoose. Ich werde diese Schemata weiterhin verwenden und ein Schema ableiten Autor und Buch Modell von ihnen.

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

Ein Mongoose-Modell erstellt beim Speichern ein Dokument in MongoDB mit den Eigenschaften, die durch das Schema definiert werden, aus dem es abgeleitet ist.

Um das Erstellen und Speichern eines Objekts zu demonstrieren, werde ich in diesem nächsten Beispiel mehrere Objekte erstellen: ein Autor Modell und mehrere Buch Modelle. Sobald diese Objekte erstellt wurden, werden sie in MongoDB mit Hilfe von gespeichert sparen Methode des Modells.

var jamieAuthor = new Author _id: new mongoose.Types.ObjectId (), Name: Vorname: 'Jamie', Nachname: 'Munro', Biografie: 'Jamie ist der Autor von ASP.NET MVC 5 mit Bootstrap und Knockout .js. ', twitter:' https://twitter.com/endyourif ', facebook:' https://www.facebook.com/End-Your-If-194251957252562/ '; jamieAuthor.save (function (err) if (err) throw err; console.log ('Autor erfolgreich gespeichert.'); var mvcBook = new Book _id: new mongoose.Types.ObjectId (), Titel: 'ASP. NET MVC 5 mit Bootstrap und Knockout.js ', Autor: jamieAuthor._id, Bewertungen: [summary:' Great read ']; mvcBook.save (function (err) if (err) throw err; console.log.) ('Buch erfolgreich gespeichert.');); Var knockoutBook = new Buch _id: new mongoose.Types.ObjectId (), Titel: 'Knockout.js: Erstellen dynamischer clientseitiger Webanwendungen', Autor: jamieAuthor._id ; knockoutBook.save (function (err) if (err) throw err; console.log ('Buch wurde erfolgreich gespeichert.');););

Im obigen Beispiel habe ich schamlos einen Verweis auf meine zwei neuesten Bücher eingefügt. Das Beispiel beginnt mit dem Erstellen und Speichern von a jamieObject das ist aus einem erstelltAutor Modell. In der sparen Funktion des jamieObject, Wenn ein Fehler auftritt, gibt die Anwendung eine Ausnahme aus. Wenn das Speichern erfolgreich ist, innerhalb des sparen Funktion werden die beiden Buchobjekte erstellt und gespeichert. Ähnlich wie jamieObject, Wenn beim Speichern ein Fehler auftritt, wird ein Fehler ausgegeben. Andernfalls wird eine Erfolgsmeldung in der Konsole ausgegeben.

Um den Verweis auf den Autor zu erstellen, verweisen die Buchobjekte auf das Autor Schema _Ich würde Primärschlüssel in der Autor Eigentum der Buch Schema.

Daten vor dem Speichern überprüfen

Es ist üblich, dass die Daten ein Modell erstellen, das von einem Formular auf einer Webseite ausgefüllt wird. Aus diesem Grund ist es eine gute Idee, diese Daten vor dem Speichern des Modells in MongoDB zu überprüfen.

In diesem nächsten Beispiel habe ich das vorherige Autorenschema aktualisiert, um die folgenden Eigenschaften zu überprüfen: Vorname, Twitter, Facebook, und linkedin.

var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, Name: Vorname: Typ: String, erforderlich: true, Nachname: String, Biografie: String, Twitter: Typ: String, Bestätigen : validator: function (text) return text.indexOf ('https://twitter.com/') === 0;, Nachricht: 'Twitter-Handle muss mit https://twitter.com/' beginnen. , facebook: type: String, validate: validator: function (text) return text.indexOf ('https://www.facebook.com/') === 0;, Nachricht: 'Facebook muss starten mit https://www.facebook.com/ ', linkedin: type: String, validate: validator: function (text) return text.indexOf (' https://www.linkedin.com/ ') === 0;, Nachricht: "LinkedIn muss mit https://www.linkedin.com/ ' beginnen, profilePicture: Buffer, erstellt: Typ: Datum, Standard: Date.now);

Das Vorname Eigenschaft wurde mit der zugeschrieben erforderlich Eigentum. Wenn ich jetzt anrufe sparen Bei dieser Funktion meldet Mongoose einen Fehler mit einer Meldung, die angibt, dass Vorname Eigenschaft ist erforderlich. Ich entschied mich, das nicht zu machen Nachname Eigentum erforderlich, falls Cher oder Madonna Autoren in meiner Datenbank waren.

Das Twitter, Facebook, und linkedin Für alle Eigenschaften werden sehr ähnliche benutzerdefinierte Validatoren angewendet. Sie stellen jeweils sicher, dass die Werte mit dem jeweiligen Domainnamen der sozialen Netzwerke beginnen. Diese Felder sind nicht erforderlich, daher wird der Prüfer nur angewendet, wenn Daten für diese Eigenschaft bereitgestellt werden.

Daten suchen und aktualisieren

Eine Einführung in Mongoose wäre nicht vollständig ohne ein Beispiel, in dem nach einem Datensatz gesucht und eine oder mehrere Eigenschaften für dieses Objekt aktualisiert werden.

Mongoose bietet verschiedene Funktionen, um Daten für ein bestimmtes Modell zu finden. Die Funktionen sind finden, einen finden, und findById.

Das finden und einen finden Funktionen akzeptieren beide ein Objekt als Eingabe, wodurch komplexe Suchen möglich sind findById akzeptiert nur einen einzelnen Wert mit einer Rückruffunktion (ein Beispiel folgt in Kürze). In diesem nächsten Beispiel werde ich zeigen, wie Sie alle Bücher finden, die im Titel die Zeichenfolge "mvc" enthalten.

Book.find (title: / mvc / i). Exec (Funktion (err, books) if (err) throw err; console.log (books););

In der finden Funktion, ich suche nach der Groß- / Kleinschreibung "mvc" auf der Titel Eigentum. Dies wird unter Verwendung der gleichen Syntax für das Durchsuchen einer Zeichenfolge mit JavaScript erreicht.

Der Aufruf der find-Funktion kann auch mit anderen Abfragemethoden, wie z woher, und, oder, Grenze, Sortieren, irgendein, usw.

Lassen Sie uns das vorherige Beispiel näher erläutern, um unsere Ergebnisse auf die ersten fünf Bücher zu beschränken und nach dem erstellten Datum absteigend zu sortieren. Dies führt zu den fünf neuesten Büchern, die "mvc" im Titel enthalten.

Book.find (title: / mvc / i). Sort ('- created') .limit (5) .exec (function (err, books) if (err) werfen err; console.log (books); );

Nach dem Auftragen der finden Funktion ist die Reihenfolge der anderen Funktionen nicht wichtig, da alle verketteten Funktionen in einer einzigen Abfrage zusammengestellt werden nicht ausgeführt bis zum exec Funktion wird aufgerufen.

Wie ich bereits erwähnt habe findById wird etwas anders ausgeführt. Es wird sofort ausgeführt und akzeptiert eine Rückruffunktion, anstatt eine Funktionskette zuzulassen. In diesem nächsten Beispiel frage ich einen bestimmten Autor nach seinem _Ich würde.

Author.findById ('59b31406beefa1082819e72f', function (err, author) if (err) werfen err; console.log (author););

Das _Ich würde In Ihrem Fall könnte es etwas anders sein. Ich habe das kopiert _Ich würde von einem vorherigen console.log wenn Sie eine Liste von Büchern finden, deren Titel "mvc" enthält.

Nachdem ein Objekt zurückgegeben wurde, können Sie seine Eigenschaften ändern, um es zu aktualisieren. Nachdem Sie die erforderlichen Änderungen vorgenommen haben, rufen Sie die an sparen wie bei der Erstellung des Objekts. In diesem nächsten Beispiel werde ich das erweitern findbyId Beispiel und aktualisieren Sie die linkedin Eigentum auf dem Autor.

Author.findById ('59b31406beefa1082819e72f', function (err, author) if (err) werfen Fehler; author.linkedin = 'https://www.linkedin.com/in/jamie-munro-8064ba1a/'; author.save (function (err) if (err) werfen err; console.log ('Autor erfolgreich aktualisiert');););

Nachdem der Autor erfolgreich abgerufen wurde, wird die linkedin Eigenschaft wird gesetzt und die sparen Funktion wird aufgerufen. Mongoose kann das erkennen linkedin Die Eigenschaft wurde geändert, und es wird nur für die Eigenschaften, die geändert wurden, eine Aktualisierungsanweisung an MongoDB gesendet. Wenn beim Speichern ein Fehler aufgetreten ist, wird eine Ausnahme ausgelöst und die Anwendung angehalten. Bei Erfolg wird eine Erfolgsmeldung an der Konsole protokolliert.

Mongoose bietet außerdem zwei zusätzliche Funktionen, mit denen ein Objekt gefunden und in einem einzigen Schritt mit den entsprechend benannten Funktionen gespeichert werden kann: findByIdAndUpdate und findOneAndUpdate. Lassen Sie uns das vorherige Beispiel aktualisieren, um die findByIdAndUpdate.

Author.findByIdAndUpdate ('59b31406beefa1082819e72f'), linkedin: 'https://www.linkedin.com/in/jamie-munro-8064ba1a/', function (err, author) if (err) throw err; (Autor););

Im vorherigen Beispiel werden die zu aktualisierenden Eigenschaften als Objekt an den zweiten Parameter des übergeben findByIdAndUpdate Funktion. Die Rückruffunktion ist jetzt der dritte Parameter. Wenn das Update erfolgreich ist, wird die Autor Das zurückgegebene Objekt enthält die aktualisierten Informationen. Dies wird in der Konsole protokolliert, um die Eigenschaften des aktualisierten Autors anzuzeigen.

Endgültiger Beispielcode

In diesem Artikel habe ich kleine Codefragmente bereitgestellt, die eine sehr spezifische Aktion identifizieren, z. B. Erstellen eines Schemas, Erstellen eines Modells usw. Lassen Sie uns alles in einem vollständigen Beispiel zusammenfassen. 

Zunächst habe ich zwei zusätzliche Dateien erstellt: author.js und book.js. Diese Dateien enthalten ihre jeweiligen Schemadefinitionen und die Modellerstellung. Die letzte Codezeile macht das Modell zur Verwendung in der index.js Datei.

Beginnen wir mit der Datei author.js:

var Mungo = Anfordern ('Mungo'); var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, Name: Vorname: Typ: String, erforderlich: true, Nachname: String, Biografie: String, Twitter: Typ: String, Bestätigen : validator: function (text) return text.indexOf ('https://twitter.com/') === 0;, Nachricht: 'Twitter-Handle muss mit https://twitter.com/' beginnen. , facebook: type: String, validate: validator: function (text) return text.indexOf ('https://www.facebook.com/') === 0;, Nachricht: 'Facebook muss starten mit https://www.facebook.com/ ', linkedin: type: String, validate: validator: function (text) return text.indexOf (' https://www.linkedin.com/ ') === 0;, Nachricht: "LinkedIn muss mit https://www.linkedin.com/ ' beginnen, profilePicture: Buffer, erstellt: Typ: Datum, Standard: Date.now); var Author = mongoose.model ('Author', authorSchema); module.exports = Autor;

Als nächstes kommt der book.js Datei:

var Mungo = Anfordern ('Mungo'); var bookSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, Titel: String, Zusammenfassung: String, isbn: String, Miniatur: Puffer, Autor: Typ: mongoose.Schema.Types.ObjectId, ref: ' Autor ', Bewertungen: [Zusammenfassung: String, Detail: String, AnzahlOfStars: Anzahl, Erstellt: Typ: Datum, Standardwert: Date.now], erstellt: Typ: Datum, Standardwert: Datum.now ); var Book = mongoose.model ('book', bookSchema); module.exports = Buchen;

Und zum Schluss das Update index.js Datei:

var Mungo = Anfordern ('Mungo'); var Author = erfordern ('./ author'); var Book = erfordern ('./ book'); mongoose.connect ('mongodb: // localhost / mongoose_basics'), function (err) if (err) throw err; console.log ('Erfolgreich verbunden'); var jamieAuthor = neuer Autor (_id: new mongoose.Types. ObjectId (), Name: Vorname: 'Jamie', Nachname: 'Munro', Biografie: 'Jamie ist der Autor von ASP.NET MVC 5 mit Bootstrap und Knockout.js', Twitter: 'https: // twitter .com / endyourif ', facebook:' https://www.facebook.com/End-Your-If-194251957252562/ '); jamieAuthor.save (function (err) if (err) throw err; console.log.) ('Autor erfolgreich gespeichert.'); Var mvcBook = new Book (_id: new mongoose.Types.ObjectId (), Titel: 'ASP.NET MVC 5 mit Bootstrap und Knockout.js'), Autor: jamieAuthor._id, Bewertungen : [summary: 'Great read']); mvcBook.save (function (err) if (err) throw err; console.log ('Buch wurde erfolgreich gespeichert.');); var knockoutBook = neues Buch (_id: new mongoose.Types.ObjectId (), Titel: 'Knockout.js: Erstellen dynamischer clientseitiger Webanwendungen', Autor: jamieAuthor._id); knockoutBook.save (funktion ion (err) if (err) Wurffehler; console.log ('Buch wurde erfolgreich gespeichert.'); ); ); );

Im obigen Beispiel sind alle Mongoose-Aktionen in enthalten verbinden Funktion. Das Autor und Buch Dateien sind im Lieferumfang enthalten benötigen Funktion nach dem Einschließen der Mungo Bibliothek.

Wenn MongoDB ausgeführt wird, können Sie jetzt die vollständige Node.js-Anwendung mit dem folgenden Befehl ausführen:

Knoten index.js

Nachdem ich einige Daten in meiner Datenbank gespeichert habe, habe ich das aktualisiert index.js Datei mit den Suchfunktionen wie folgt:

var Mungo = Anfordern ('Mungo'); var Author = erfordern ('./ author'); var Book = erfordern ('./ book'); mongoose.connect ('mongodb: // localhost / mongoose_basics'), function (err) if (err) werfen err; console.log ('Erfolgreich verbunden'); Book.find (title: / mvc / i). sort ('- created') .limit (5) .exec (Funktion (err, books) if (err) throw err; console.log (books);); Author.findById ('59b31406beefa1082819e72f', function (err , author) if (err) werfen err; author.linkedin = 'https://www.linkedin.com/in/jamie-munro-8064ba1a/'; author.save (function (err) if (err) throw) err; console.log ('Autor erfolgreich aktualisiert'););); Author.findByIdAndUpdate ('59b31406beefa1082819e72f'), linkedin: 'https://www.linkedin.com/in/jamie-munro-8064ba1a/' , function (err, author) if (err) werfen err; console.log (author);););

Wieder können Sie die Anwendung mit dem Befehl ausführen: Knoten index.js.

Zusammenfassung

Nach dem Lesen dieses Artikels sollten Sie in der Lage sein, äußerst flexible Mongoose-Schemas und -Modelle zu erstellen, einfache oder komplexe Validierungen anzuwenden, Dokumente zu erstellen und zu aktualisieren und schließlich nach den erstellten Dokumenten zu suchen.

Hoffentlich fühlen Sie sich jetzt mit Mongoose wohl. Wenn Sie mehr darüber erfahren möchten, würde ich Ihnen empfehlen, die Mongoose Guides durchzugehen, in denen fortgeschrittenere Themen wie Bevölkerung, Middleware, Versprechungen usw. behandelt werden.

Fröhliche Jagd (schlechte Mungo-Tierreferenz)!