DB接続が確立された後で再利用できるように、コレクションへの参照を保持することが悪い/良い考えであれば、私はアウトラインの文書を見つけることができませんでした。ネイティブMongoDBドライバNode.js - コレクションを格納する必要がありますか?
たとえば、私たちのデータベース.tsは、サーバーの起動時に呼び出されます。それは、コレクション全体を把握し、モジュール内で使用するために保管します。モジュール全体を参照することができます。コレクション
/*database.ts*/
//module to keep 1 connection alive and allow us to have 1 instance of our collections.
import {MongoClient, Db, Collection } from 'mongodb';
let uri: string = 'connection_string';
export let db: Db;
export let usrCollection: Collection;
export let bookCollection: Collection;
export function initDb(cb: any) {
MongoClient.connect(uri, function(err, database) {
//handle err
db = database;
cb(); //returns now since db is assigned.
});
}
export function initCollections() {
usrCollection = db.collection('users'); //non-async
bookCollection = db.collection('book'); //non-async
}
/*app.ts*/
//in our express app when it start up
import {db, initCollections, initDb} from './database';
initDb(function() {
//this will hold up our server from starting BUT
//there is no reason to make it async.
initCollections();
});
を格納/構築このパターンの短い来るのいくつかは何ですか?の
例改善することができますし、コレクションを管理することでパフォーマンスが低下するのを避けるべきですか?このパターンは、私のソースコードのバグを未然に防ぐか、バグを見つけ出して将来のために拡張しやすくしますか?またはより良いパターンがあります。 - mongooseのようなnode.jsソリューション用のネイティブmongodbドライバ以外のextライブラリは必要ありません。
ですが、内部でコレクションを再利用するために保存しますか?または各関数で特定のコレクションのハンドラを取得する必要がありますか?共有した例を見ると、一度格納して使用するのではなく、常にdb.collectionメソッドが呼び出されます。私はちょうどコレクションを公開することも恐ろしいアイデアだと気づいたのですが、モジュールの内部ではコレクションへの参照を保持する必要がありますか? – Andrei
はい、私はコレクションを保管します。その理由は、効率についてではなく、文字列( "users" <=> "user")の入力ミスによるバグを減らすためです。 @AndreiM。 – Zen