MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Abfragen einer Sammlung ohne Schemaübergabe in Mungo

Von der Mongoose-Homepage:

Mongoose bietet eine geradlinige, schemabasierte Lösung zum Modellieren Ihrer Anwendungsdaten und umfasst integrierte Typumwandlung, Validierung, Abfrageerstellung, Geschäftslogik-Hooks und mehr, out of the box.

Mongoose kann aus einer Sammlung potenziell eindeutiger Dokumente kein Schema ableiten. MongoDB erzwingt kein Schema für die Dokumente, die in einer Sammlung gespeichert sind.

Mongoose fügt also dem nativen NodeJS-Treiber (hier) eine Ebene hinzu, die viele für produktiver halten. Es ist jedoch nicht erforderlich, es mit MongoDB zu verwenden, wenn Node.JS verwendet wird.

Mongoose benötigt im Wesentlichen zwei Dinge, um zu funktionieren:

  1. Schema ==dies definiert die Dokumentenstruktur (Referenz). Sie können Validierung, neue Methoden hinzufügen, virtuelle Eigenschaften hinzufügen, Datentypen verwenden, Verweise auf andere Sammlungen (Modelle) herstellen.
  2. Model ==Dies ist die Klasse, die dann zur Laufzeit verwendet wird, um Abfragen für Sammlungen auszudrücken (Referenz). Eine Schemadefinition wird verwendet, um ein Modell zu erstellen.

Wie Sie also in dem von Ihnen eingefügten Beispiel gesehen haben, gibt es ein Kätzchen-Schema definiert und dann ein Model Kitten geschaffen. Das Schöne an der Verwendung eines Schemas und Modells ist, dass Mongoose dann die verfügbaren Eigenschaften/Felder erzwingt.

Sie definieren nur das Schema s und Model s einmal in einer Anwendung. Daher müssen Sie normalerweise beim Starten der Anwendung Code ausführen, um sie zu definieren, und dann das Model verwenden Instanzen nach Bedarf während des gesamten Anwendungslebenszyklus.

Es gibt viele weitere Gründe, warum Sie Mongoose möglicherweise verwenden möchten.

Sie haben jedoch absolut Recht, Sie könnten einfach etwas Direkteres ohne Schema verwenden, indem Sie den nativen NodeJS-Treiber verwenden. Die Syntax wäre der von Ihnen gezeigten ähnlich, aber etwas komplexer:

MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
  if(err) { return console.dir(err); }

  var collection = db.collection('kittens');

    collection.find().toArray(function(err, kittens) {
        // here ...
    });    
});

Statt einfach:

Kitten.find(function(err, kittens) {

});

Wenn Sie Mongoose verwenden, stellen Sie außerdem möglicherweise fest, dass das Schreiben komplexerer Abfragen einfacher zu schreiben und zu lesen ist:

Kitten.find().where('name', 'Harold').exec(/*callback*/);

Ich würde vorschlagen, mehr von der Dokumentation durchzulesen, um ein besseres Gefühl für das Framework zu bekommen und ob es Ihren Anforderungen entspricht. Die Dokumentation ist leider etwas verstreut, aber wenn Sie die Unterüberschriften des Guide durchgehen Überschrift stehen Ihnen viele gute Informationen zur Verfügung.