グローバル変数を使用できます 接続を保持します(例:db
)、例:
var db = null // global variable to hold the connection
MongoClient.connect('mongodb://localhost:27017/', function(err, client) {
if(err) { console.error(err) }
db = client.db('test') // once connected, assign the connection to the global variable
})
app.get('/', function(req, res) {
db.collection('test').find({}).toArray(function(err, docs) {
if(err) { console.error(err) }
res.send(JSON.stringify(docs))
})
})
または、必要に応じて、Promiseオブジェクトを使用することもできます。 MongoClient
によって返されます コールバック引数なしで呼び出された場合:
var conn = MongoClient.connect('mongodb://localhost:27017/') // returns a Promise
app.get('/', function(req, res) {
conn.then(client=> client.db('test').collection('test').find({}).toArray(function(err, docs) {
if(err) { console.error(err) }
res.send(JSON.stringify(docs))
}))
})
2番目の例ではES6ファットアロー関数の定義を使用したことに注意してください。
MongoClient
を呼び出さないでください。 毎回。グローバル変数またはPromisesを使用すると、MongoDB node.jsドライバーが接続プールを作成できるようになります。これにより、少なくとも2つの優れた点が実現されます。
- 接続はプールで再利用されるため、アプリケーションの存続期間中、複数の費用のかかるセットアップ/ティアダウンプロセスはありません。一度接続すれば、残りはドライバーに任せてください。
- 接続プールのサイズを制限することで、アプリケーションがデータベースに接続する量を制御できます。
2018年8月24日編集 :MongoClient.connect()
node.jsドライバーバージョン3.0以降のメソッドは、データベースオブジェクトではなくクライアントオブジェクトを返します。上記の例は、最新のnode.jsドライバーバージョンで最新の状態に保つように変更されています。