[MongoDB學習筆記-02] Node.js連線MongoDB的兩種方法
阿新 • • 發佈:2018-12-24
MongoDB Node.js驅動程式是被官方所支援的原生Node.js驅動程式,他是至今為止最好的實現, 並且得到了MongoDB官方的支援。MongoDB團隊已經採用MongoDB Node.js驅動程式作為標準方法。
npm install mongodb@1.4.3 // MongoDB Node.js驅動程式
npm install mongoose@3.8.8 //mongoose模組
要從Node.js連線MongoDB資料庫我們有兩種方法可選擇:
- 通過例項化mongodb模組中提供的mongodbClient類,然後使用這個例項化的物件來建立和管理mongodb連線;
- 使用字串進行連線;
1、通過client物件連線到MongoDB
通過例項化一個MongoClient物件連線MongoDB資料庫是最常用也是最佳的方式。
建立MongoClient物件例項的語法:
MongoClient( server, options );
server : 一個serverd物件;
options : 資料庫連線選項;
如上圖所示,MongoClient連線利用了後臺的Server物件。這個物件的功能就是定義了MongoDB驅動程式怎麼連線到伺服器。
下面,看一個示例:
var MongoClient = require('mongodb' ).MongoClient,
Server = require('mongodb').server;
// 建立客戶端連線物件
var client = new MongoClient( new Server('localhost', 27017, {
socketOpations: { connectTimeoutMS: 500 },
poolSize: 5,
auto_reconnect: true
}, {
numberOfRetries: 3,
retryMilliSeconds: 500
}));
// 開啟對伺服器端MongoDB資料庫的連線
client.open(function(err, client) {
if ( err ) {
console.log('連線失敗!');
} else {
var db = client.db('blogdb'); // 建立到資料庫blogdb的連線
if ( db ) {
console.log('連線成功');
db.authenticate('username', 'pwd', function(err, result) { // 對使用者資料庫身份進行驗證
if ( err ) {
console.log('資料庫使用者身份驗證失敗');
client.close(); // 關閉對MongoDB的連線
console.log('連線已關閉......');
} else {
console.log('使用者身份驗證通過');
db.logout(function (err, result) { // 關閉對資料庫的連線,即退出資料庫
if ( !err ) {
console.log('退出資料庫出錯');
}
client.close(); // 關閉對MongoDB的連線
console.log( '已關閉連線......' );
});
}
});
}
}
});
注意: 要登出資料庫,要使用資料庫物件上的logout()方法。這將關閉到該資料庫上的連線,你不在可以使用Db物件。例如: db.logout()
;而要關閉到MongoDB的連線,要在客戶端連線上呼叫close()方法,例如: client.close()
。
寫入關注
首先,我們在連線資料庫的時候會用到一個關於寫入關注級別的問題,說白了,個人理解的話就是相當於出現問題的一個處理優先順序,你可以選擇寫入資料庫之前是否需要你確認之類的,或者發生錯誤是否忽略之類的等等,如下圖:
寫 入 級 別 | 說 明 |
---|---|
-1 | 網路錯誤被忽略 |
0 | 寫確認是不必要的 |
1 | 請求寫確認 |
2 | 寫確認請求跨主伺服器和副本集中的一個輔助伺服器 |
majority | 寫確認是從副本集的主伺服器請求的 |
用來建立MongoClient連線的Server物件的選項,如下:
用來建立MongoClient連線的資料庫連線選項,如下:
2、通過一個連線字串連線到MongoDB
這種方式要呼叫MongoClient類的connect( )方法。connect使用語法如下:
MongoClient.connect(connString, options, callback)
connString字串的語法如下:
mongodb://username:[email protected]:port/database?opations
MongoClient連線字串元件:
選 項 | 說 明 |
---|---|
mongodb:// | 指定字串使用mongodb的連線格式 |
username | 驗證時使用的使用者名稱。可選 |
password | 身份驗證時使用的密碼。可選 |
host | MongoDB伺服器主機名或者域名。它可以是多個host:port組合來連線多個MongoDB伺服器。 例如:mongodb://host1:270017, host2://270017, host3:270017/testDB |
port | 連線MongoDB伺服器時使用的埠。預設值是27017 |
database | 要連線的資料庫的名字。 預設為admin |
options | 連線時所使用的選項的鍵值對。可以在dbOpt和serverOpt引數上指定這些選項 |
下面,看一個使用連線字串方法連線MongoDB資料庫的示例:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://mongodb:[email protected]:27017/blogdb', {
db: { w: 1, native_parser: false },
server: {
poolSize: 5,
socketOpations: { connectTimeoutMS: 500 },
auto_reconnect: true
},
replSet: {},
mongos: {}
}, function(err, db) {
if ( err ) {
console.log('連線失敗!');
} else {
console.log('連線成功!');
// 登出資料庫
db.logout(function(err, result) {
if ( err ) {
console.log('登出失敗...');
}
db.close(); // 關閉連線
console.log('連線已經關閉!');
});
}
});