2013-09-06 11 views
45

開いたまま、あなたはこのようなコードを参照してください。のMongoDBを使用してのように多くの導入例でのMongoDBデータベース接続

var MongoClient = require('mongodb').MongoClient; 
MongoClient.connect("mongodb://localhost:port/adatabase", function(err, db) 
{ 
    /* Some operation... CRUD, etc. */ 
    db.close(); 
}); 

のMongoDBは、他のデータベースシステムのようなものである場合は、openclose操作は一般的に高価な時間的です。

だから、私の質問はこれです:それは単に、様々なデータベース関連の作業(コレクションへの挿入文書を行い、いくつかのモジュールグローバルに返さdb値を割り当て、一度MongoClient.connect("...を行うモジュールで様々な機能を持ってOKですが、更新文書など)をアプリケーションの他の部分から呼び出すと(その結果、dbの値が再利用されます)、アプリケーションが終了したら、closeを実行します。

つまり、opencloseが1回実行されます。データベース関連の操作を行う必要があるたびにではありません。そして、最初にopen\connectの間に返されたオブジェクトを再利用し続けます。実際にすべてのデータベース関連の作業を終えたときには、closeという最後の値で処分してください。

closeの前にすべてのI/Oが非同期であるため、closeを発行する前に最後のデータベース操作が完了していることを確認してください。これはOKだと思われますが、私はMongoDBを初めて使ったので、何かが足りない場合に備えて再確認したいと思っていました。ありがとう!

+0

[こちら](http://stackoverflow.com/questions/14495975/why-its-recommended-not-to-close-any-mongodb-connection-anywhere-in-node-js-code)もチェックしてください。あなたを助けるかもしれない –

+0

興味深い....はい、役に立つ;どうもありがとうございました! – Lew

答えて

35

はい、これは正常かつ一般的な動作です。あなたのアプリケーションを起動し、dbに接続し、dbに対して長期間操作を行い、接続が予期せず終了した場合に再接続し、接続を閉じることはない(プロセスが終了したときに起こる自動終了に頼る) 。

+1

また、デフォルトでnode-mongodb-nativeで5つのプールされた接続が得られます。 [poolSize](http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect-options)のドキュメントをご覧ください。 – hurrymaplelad

+0

私の疑惑を確認してくれてありがとう、ピーター - ありがとう! – Lew

+0

私は解決策https://stackoverflow.com/a/24634454/3994271に従っていますが、これはこの回答に記載されているのと同じことです。しかし、接続が予期せず終了した場合、どうすれば自動的に再接続できますか? – Ayan

関連する問題