NodeJS 連線 MongoDB
假設我們有個現成的 node/express 專案,首先安裝 mongodb 套件:
npm i mongodb
官方 mongodb 套件說明 裡面有各版本的教學和 API 文件。 先撰寫可以建立連線並使用某個 DB 的模組,在此檔名為 mdb_connect.js,只要滙出 getDB 方法即可:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'test';
let _db; // 存放對應 DB 的物件
const client = new MongoClient(url, {useUnifiedTopology: true});
client.connect()
.then(c => {
_db = client.db(dbName); // c 同 client
})
.catch(error=>{
console.log('Cannot connect the mongodb server!');
console.log(error);
});
const getDB = ()=>{
if(!_db) throw new Error('No MongoDB connection!');
return _db;
};
module.exports = getDB;
模組被滙入之後,就開始依設定連線,並將 Db 物件存放到 _db
變數內,呼叫 getDB() 即回傳 _db
所指的 Db 物件。
以下為在 express app 下使用的情況:
const getDB = require(__dirname + '/mdb_connect');
app.get('/try-mdb', (req, res)=>{
const mdb = getDB();
mdb.collection('books')
.find({})
.toArray() // Cursor 的 toArray()
.then((ar)=>{
res.json(ar);
})
});
之前 關聯查詢 的用法,另外用了 AggregationCursor 的 forEach() 方法:
app.get('/try-mdb2', (req, res)=>{
const mdb = getDB();
const ar = [];
mdb.collection('books')
.aggregate([
{
$lookup: {
from: 'publishers',
foreignField: '_id',
localField: 'publisher_id',
as: 'publisher'
}
}
])
.forEach(function(doc){
ar.push(doc)
}).then(()=>{
res.json(ar);
})
});
沒有留言:
張貼留言