Ich bin gerade bei Node.js angekommen und sehe, dass es viele Bibliotheken gibt, die mit der MongoDB verwendet werden können. Die beliebtesten scheinen diese beiden zu sein: (Mungo und Mongodb). Kann ich Vor- und Nachteile dieser Erweiterungen erhalten? Gibt es bessere Alternativen zu diesen beiden?
Bearbeiten: Es wurde eine neue Bibliothek gefunden, die auch als knotenmongolisch interessant erscheint und "Mongolian DeadBeef ist ein großartiger Mongo DB node.js-Treiber, der versucht, die Mongodb-Shell genau zu approximieren." (readme.md)
https://github.com/marcello3d/node-mongolian
Dies dient nur dazu, neuen Leuten, die dies sehen, mehr Ressourcen hinzuzufügen. Im Grunde genommen ist Mongolisch wie ein ODM ...
javascript
node.js
mongodb
mongoose
norman784
quelle
quelle
Antworten:
Mongoose ist eine höhere Ebene und verwendet den MongoDB-Treiber (es ist eine Abhängigkeit, überprüfen Sie die package.json), sodass Sie diese Option in beiden Fällen verwenden können. Die Frage, die Sie sich stellen sollten, lautet: "Möchte ich den Rohtreiber verwenden oder benötige ich ein Objekt-Dokument-Modellierungswerkzeug?" Wenn Sie nach einem Tool zur Objektmodellierung (ODM, ein Gegenstück zu ORMs aus der SQL-Welt) suchen, um Arbeiten auf niedrigerer Ebene zu überspringen, möchten Sie Mongoose.
Wenn Sie einen Treiber benötigen, weil Sie viele Regeln brechen möchten, die ein ODM möglicherweise erzwingt, wählen Sie MongoDB. Wenn Sie einen schnellen Treiber suchen und mit einigen fehlenden Funktionen leben können, probieren Sie Mongolian DeadBeef aus: https://github.com/marcello3d/node-mongolian
quelle
Mungo ist bei weitem das beliebteste. Ich benutze es und habe andere nicht benutzt. Ich kann also nicht über die anderen sprechen, aber ich kann Ihnen sagen, was ich mit Mungo zu tun habe.
mongooseInstace.model('MyCollection', { "_id": Number, "xyz": String })
es besser (obwohl der Name der Sammlung wirklich lautetMyCollection
):mongooseInstace.model('mycollection', { "_id": Number, "xyz": String })
Aber ehrlich gesagt ist es wirklich nützlich. Das größte Problem ist die Dokumentation. Es ist da, aber es ist trocken und schwer zu finden, was Sie brauchen. Es könnte bessere Erklärungen und mehr Beispiele gebrauchen. Aber sobald Sie diese Dinge überwunden haben, funktioniert es wirklich sehr gut.
quelle
Ich baue eine neue App und entwerfe jetzt die Struktur davon. Hier sind einige Gedanken darüber, warum man Mungo benutzt oder nicht:
mongodb Treiber ist Raw Treiber, Sie kommunizieren direkt mit Mongodb. Mungo ist Abstraktionsschicht. Sie erhalten eine einfachere E / A für die Datenbank, während Ihre Datenbankstruktur einfach genug ist.
Abstraktion bringt seine Anforderungen mit sich und Sie müssen diesen folgen. Ihre App ist langsamer, verbraucht mehr RAM und ist komplizierter. Wenn Sie jedoch wissen, wie man sie verwendet, können Sie einfache Objekte schneller schreiben und in der Datenbank speichern.
Ohne Mungo haben Sie eine schnellere Anwendung mit direkter Verbindung zu Mongodb. Niemand sagt, dass Sie keine eigenen Modelle schreiben können, um Dinge in db zu speichern. Sie können. Und ich denke es ist einfacher. Sie schreiben Code, den Sie verwenden werden, Sie wissen, was Sie brauchen. Ihre Abstraktionsschicht ist viel kleiner als die von Mungos.
Ich komme aus der PHP-Welt, dort hatten wir rohes SQL mit abgeschriebenen mysql_-Funktionen, dann haben wir PDO - objektorientierte Abstraktionsschicht, um mit SQL zu kommunizieren. Oder Sie können ein schweres ORM wie Doctrine wählen, um ähnliche Dinge wie Mungo auf mongoDB zu haben. Objekte mit Setter / Getter / Save-Methode und so weiter. Das ist in Ordnung, aber wenn Sie mehr Abstraktion hinzufügen, fügen Sie mehr Dateien, mehr Logik, mehr Dokumentation und mehr Abhängigkeiten hinzu. Ich mag es, Dinge einfach zu halten und weniger Abhängigkeiten in meinem Stapel zu haben. Übrigens, deshalb bin ich von PHP auf Server-Client Javascript umgestiegen.
Mit Mungo finde ich es großartig, einige einfache Apps zu schreiben , die eine einfache Datenbankstruktur ähnlich wie SQL haben . Wenn Sie anfangen, Unterdokumente zu haben und all diese verrückten Fragen stellen möchten, fiel es mir mit Mungo wirklich schwer. Sie müssen sich die Mongodb-Dokumente und dann die Mungo-Dokumente ansehen, um herauszufinden, wie Sie eine gewünschte Abfrage erstellen können. Manchmal werden Sie feststellen, dass die X-Zukunft von Mongodb nicht im Mungo liegt. Gehen Sie also zum Raw-Mongodb-Treiber und schreiben Sie Raw-Mongodb-Abfragen an der einen oder anderen Stelle. Ohne Mungo schauen Sie sich Mongodb-Dokumente an und führen Ihre Abfrage durch.
quelle
Ich habe nur Mongodb verwendet. Meiner persönlichen Meinung nach würde ich empfehlen, mit etwas Niedrigem zu beginnen und dann nach oben zu gehen. Andernfalls können Sie die zusätzlichen erweiterten Funktionen von Treibern höherer Stufe wie Mungo ohne wirklichen Nutzen nutzen.
Das Problem, das ich mit mongodb hatte, das in node.js endemisch ist, ist die schlechte Dokumentation. Es gibt Dokumentation und vieles davon, aber es ist nicht immer die hilfreichste. Dass ich bisher gesehen habe, gibt es keine guten und gründlichen Beispiele für die Produktionsnutzung des Treibers. Die Dokumentation enthält dasselbe Beispiel für das Öffnen einer Verbindung, das Ausgeben eines Befehls und das Schließen der Verbindung. Sie können erkennen, dass es kopiert und aus einer Vorlage eingefügt wurde, da jedes Beispiel alles enthält, was möglicherweise benötigt wird, und nicht nur das, was für jedes Beispiel benötigt wird.
Um ein völlig zufälliges Beispiel zu geben:
Was genau macht "Operationen mit rohen Bson-Puffern ausführen"? Ich kann es nirgendwo erklären und eine Google-Suche nach diesem Satz hilft nicht. Vielleicht könnte ich weiter googeln, aber ich sollte nicht müssen. Die Informationen sollten da sein. Gibt es Leistungs-, Stabilitäts-, Integritäts-, Kompatibilitäts-, Portabilitäts- oder Funktionsvorteile für das Aktivieren / Deaktivieren dieser Option? Ich habe wirklich keine Ahnung, ohne tief in den Code einzutauchen, und wenn Sie in meinem Boot sind, ist das ein ernstes Problem. Ich habe einen Daemon, bei dem keine perfekte Persistenz erforderlich ist, das Programm jedoch zur Laufzeit sehr stabil sein muss. Ich könnte annehmen, dass dies bedeutet, dass erwartet wird, dass ich JSON deserialisiere und serialisiere, oder dass es sich um etwas Niedriges handelt, das für den Benutzer intern und transparent ist, aber ich könnte mich irren. Obwohl ich dazu neige, gute Annahmen zu treffen, kann ich mich bei der Erstellung wichtiger Systeme nicht auf Annahmen und Vermutungen verlassen. Hier kann ich also entweder meine Behauptung mit Code testen oder viel tiefer in Google oder deren Code eintauchen. Als Einzelfall ist das nicht so schlimm, aber ich finde mich oft in dieser Situation wieder, wenn ich ihre Dokumentation lese. Der Unterschied kann bedeuten, dass Tage für eine Aufgabe im Vergleich zu Stunden aufgewendet wurden. Ich brauche eine Bestätigung und die Dokumentation gibt mir kaum eine Erklärung, geschweige denn eine Bestätigung.
Die Dokumentation ist überstürzt. Es erklärt keine Ereignisse, gibt vage Details darüber, wann Fehler ausgelöst werden, oder die Art dieser Fehler, und es gibt oft mehrere Möglichkeiten, um eine Verbindung herzustellen, die unklar sein kann. Sie können durchkommen und es ist nicht völlig nutzlos, aber es ist sehr rau an den Rändern. Sie werden feststellen, dass einige Dinge dem Rätselraten und Experimentieren überlassen bleiben.
quelle