在node中使用mongogb數據庫
首先要安裝mongodb模塊:
npm install mongodb
連接MongoDB有兩種方法:
- 通過實例化mongodb模塊中提供的MongoClient類,然後使用這個實例化的對象來創建和管理mongodb連接;
- 使用字符串進行連接;
一、使用MongoClient
通過實例化一個MongoClient對象連接MongoDB數據庫是最常用也是最佳的方式。
創建MongoClient對象實例的語法:
var client= new MongoClient(new Server('localhost',27017,{...},{...}));
參數解釋:
- localhost: 主機名
- 27017: 默認連接端口號
- 第一個{…}: Server對象配置
- 第二個{…}: 數據庫連接選項配置
可以看到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()。
寫入關注
首先,我們在連接數據庫的時候會用到一個關於寫入關注級別的問題,說白了,個人理解的話就是相當於出現問題的一個處理優先順序,你可以選擇寫入數據庫之前是否需要你確認之類的,或者發生錯誤是否忽略之類的等等,如下圖:
來創建MongoClient連接的Server對象的選項,如下:
用來創建MongoClient連接的數據庫連接選項,如下:
二、使用連接字符串
這種方式要調用MongoClient類的connect( )方法。connect使用語法如下:
MongoClient.connect(connString, options, callback)
connString字符串的語法如下:
mongodb://username:password@host:port/database?opations
MongoClient連接字符串組件:
舉個栗子:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://mongodb:test@localhost: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('連接已經關閉!');
});
}
});