Node.jsにたどり着いたところ、MongoDBで使用できるライブラリがたくさんあることがわかりました。最も人気のあるものは、これら2つ(mongooseとmongodb)のようです。これらの拡張機能の長所と短所を取得できますか?これら2つのより良い代替手段はありますか?
編集:node-mongolianとも興味深いと思われる新しいライブラリを見つけました。「Mongolian DeadBeefは、mongodb Shellを厳密に近似しようとする素晴らしいMongo DB node.jsドライバーです」。 (readme.md)
https://github.com/marcello3d/node-mongolian
これは、これを見る新しい人々により多くのリソースを追加するためです。したがって、基本的にモンゴル語はODMのようなものです...
Mongooseはより高いレベルであり、MongoDBドライバーを使用します(依存関係であるため、package.jsonを確認してください)。そのため、これらのオプションを指定すると、どちらの方法でも使用できます。自問すべき質問は、「生のドライバを使用したいのですか、それともオブジェクトドキュメントモデリングツールが必要ですか?」です。いくつかの低レベルの作業をスキップするオブジェクトモデリング(SQLのORMに相当するODM)ツールを探しているなら、Mongooseが必要です。
ドライバーが必要な場合は、ODMが実施する可能性のある多くの規則を破るつもりなので、MongoDBを使用します。高速ドライバーが必要で、いくつかの欠落している機能を使用できる場合は、Mongolian DeadBeefを試してください。 https://github.com/marcello3d/node-mongolian
マングースは、群を抜いて最も人気があります。私はそれを使用し、他の人は使用していません。だから私は他の人について話すことはできませんが、私はあなたにマングースとの不満を伝えることができます。
mongooseInstace.model('MyCollection', { "_id": Number, "xyz": String })
のようなことをする代わりに、(コレクション名が実際にMyCollection
であっても)行う方が良いです:mongooseInstace.model('mycollection', { "_id": Number, "xyz": String })
しかし、正直なところ、それは本当に便利です。最大の問題はドキュメントです。そこにありますが、乾燥していて、必要なものを見つけるのは難しいです。より良い説明とより多くの例を使用できます。しかし、これらのことをすり抜けると、本当にうまく機能します。
私は新しいアプリを構築し、現在その構造を設計しています。ここでは、mongooseを使用する理由と使用しない理由について考えます。
mongodbドライバーはrawドライバーです。mongodbと直接通信します。マングースは抽象化レイヤーです。 dbの構造が十分にシンプルでありながら、dbへのI/Oが簡単になります。
抽象化はその要件をもたらし、それらに従う必要があります。アプリは遅くなり、より多くRAMを食べ、より複雑になりますが、使用方法を知っていれば、単純なオブジェクトをより速く記述し、データベースに保存できます。
Mongooseを使用しないと、mongodbに直接接続してアプリケーションを高速化できます。データベースにデータを保存するための独自のモデルを書くことはできないと言う人はいません。あなたはできる。そして、もっと簡単だと思います。使用するコードを作成し、必要なものを知っています。抽象化レイヤーは、マングースのレイヤーよりもずっと小さくなります。
私はPHP worldから来ました、そこには減価償却されたmysql_関数を持つ生のSQLがあり、PDO-sqlと通信するためのオブジェクト指向の抽象化レイヤーがあります。または、=のような重いORMを選択できますDoctrine mongoDBのmongooseに似たものを用意します。setter/ getters/saveメソッドなどのオブジェクト。これは問題ありませんが、抽象化を追加することで、ファイル、ロジック、ドキュメント、依存関係を増やします。スタックを単純にし、依存関係を少なくしたいのですが、そういうわけで、PHPからサーバー/クライアントJavascriptに移動しました。
Mongooseでは、いくつかのsqlに似た単純なdb構造を持つ単純なアプリを記述するのは素晴らしいと思います。サブドキュメントの作成を開始し、これらのクレイジーなクエリをすべて作成する場合、mongooseでは非常に難しいことがわかりました。 mongodbのドキュメントを見てから、mongooseのドキュメントを見て、必要なクエリを作成する方法を見つける必要があります。時々、mongodbのX futureはマングースではないことがわかるので、生のmongodbドライバーに行き、生のmongodbクエリを1か所で記述します。 mongooseがなければ、mongodb docsを見てクエリを実行します。
Mongodbのみを使用しました。私個人の意見では、何か低いレベルから始めてから上に進むことをお勧めします。そうしないと、mongooseのような高レベルのドライバーが提供する追加の高度な機能を使用しても、実際の利益が得られない場合があります。
Node.jsの風土病であるmongodbで私が抱えていた問題は、不十分なドキュメントです。ドキュメントとその多くがありますが、常に最も役立つとは限りません。私がこれまで見てきたことは、ドライバーの本番使用の良い完全な例はありません。ドキュメントには、接続を開き、コマンドを発行して接続を閉じるという同じテンプレートの例が記載されています。すべての例には、各例に必要なものだけでなく、必要なものすべてに必要なものが含まれているため、テンプレートからコピーして貼り付けることができます。
完全にランダムに取られた例を与えるには:
「生のbsonバッファーを使用して操作を実行する」とは正確には何ですか私はそれがどこでも説明されているのを見つけることができず、そのフレーズのGoogle検索は助けになりません。おそらく、Googleをさらに進めることができますが、そうする必要はないはずです。情報はそこにあるはずです。このオプションを有効/無効にするためのパフォーマンス、安定性、整合性、互換性、移植性、または機能的な利点はありますか?コードを深く掘り下げなければ、私にはまったくわからない。あなたが私のボートに乗っているなら、それは深刻な問題だ。完全な永続性は必要ありませんが、実行時にプログラムが非常に安定している必要があるデーモンがあります。これは、JSONにデシリアライズおよびシリアライズすることを期待している、またはユーザーに対して内部的かつ透過的な低レベルの何かを期待しているが、間違っている可能性があることを意味します。私は良い仮定をする傾向がありますが、重要なシステムを作るとき、私は仮定と当て推量に頼ることができません。したがって、ここでコードを使用してアサーションをテストするか、Googleまたはそのコードをより深く掘り下げることができます。これはそれほど悪いことではありませんが、ドキュメントを読んでいると、この状況に何度も陥ります。違いは、タスクに費やされる日数と時間を意味する場合があります。確認が必要です。確認はもちろんのこと、ドキュメントにはほとんど説明がありません。
ドキュメントは急ぎます。イベントについては説明せず、エラーがスローされるタイミングやエラーの性質についてのあいまいな詳細を提供します。接続を実現する方法はいくつかありますが、それらは不明な場合があります。あなたはそれで完全に役に立たないことができますが、それは端の周りで非常に荒いです。推測と実験に委ねられることがいくつかあります。