node.js連接MongoDB數(shù)據(jù)庫(kù)的2種方法教程
前言
MongoDB Node.js驅(qū)動(dòng)程序是被官方所支持的原生node.js驅(qū)動(dòng)程序,他是至今為止最好的實(shí)現(xiàn), 并且得到了MongoDB官方的支持。MongoDB團(tuán)隊(duì)已經(jīng)采用MongoDB Node.js驅(qū)動(dòng)程序作為標(biāo)準(zhǔn)方法。
npm install mongodb@1.4.3 // MongoDB Node.js驅(qū)動(dòng)程序 npm install mongoose@3.8.8 //mongoose模塊
要從Node.js連接MongoDB數(shù)據(jù)庫(kù)我們有兩種方法可選擇:
- 通過(guò)實(shí)例化mongodb模塊中提供的mongodbClient類,然后使用這個(gè)實(shí)例化的對(duì)象來(lái)創(chuàng)建和管理mongodb連接;
- 使用字符串進(jìn)行連接;
1、通過(guò)client對(duì)象連接到MongoDB
通過(guò)實(shí)例化一個(gè)MongoClient對(duì)象連接MongoDB數(shù)據(jù)庫(kù)是最常用也是最佳的方式。
創(chuàng)建MongoClient對(duì)象實(shí)例的語(yǔ)法:
MongoClient( server, options );
server : 一個(gè)serverd對(duì)象;
options : 數(shù)據(jù)庫(kù)連接選項(xiàng);

如上圖所示,MongoClient連接利用了后臺(tái)的Server對(duì)象。這個(gè)對(duì)象的功能就是定義了MongoDB驅(qū)動(dòng)程序怎么連接到服務(wù)器。
下面,看一個(gè)示例:
var MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').server;
// 創(chuàng)建客戶端連接對(duì)象
var client = new MongoClient( new Server('localhost', 27017, {
socketOpations: { connectTimeoutMS: 500 },
poolSize: 5,
auto_reconnect: true
}, {
numberOfRetries: 3,
retryMilliSeconds: 500
}));
// 打開(kāi)對(duì)服務(wù)器端MongoDB數(shù)據(jù)庫(kù)的連接
client.open(function(err, client) {
if ( err ) {
console.log('連接失敗!');
} else {
var db = client.db('blogdb'); // 建立到數(shù)據(jù)庫(kù)blogdb的連接
if ( db ) {
console.log('連接成功');
db.authenticate('username', 'pwd', function(err, result) { // 對(duì)用戶數(shù)據(jù)庫(kù)身份進(jìn)行驗(yàn)證
if ( err ) {
console.log('數(shù)據(jù)庫(kù)用戶身份驗(yàn)證失敗');
client.close(); // 關(guān)閉對(duì)MongoDB的連接
console.log('連接已關(guān)閉......');
} else {
console.log('用戶身份驗(yàn)證通過(guò)');
db.logout(function (err, result) { // 關(guān)閉對(duì)數(shù)據(jù)庫(kù)的連接,即退出數(shù)據(jù)庫(kù)
if ( !err ) {
console.log('退出數(shù)據(jù)庫(kù)出錯(cuò)');
}
client.close(); // 關(guān)閉對(duì)MongoDB的連接
console.log( '已關(guān)閉連接......' );
});
}
});
}
}
});
注意: 要注銷數(shù)據(jù)庫(kù),要使用數(shù)據(jù)庫(kù)對(duì)象上的logout()方法。這將關(guān)閉到該數(shù)據(jù)庫(kù)上的連接,你不在可以使用Db對(duì)象。例如: db.logout();而要關(guān)閉到MongoDB的連接,要在客戶端連接上調(diào)用close()方法,例如: client.close() 。
寫(xiě)入關(guān)注
首先,我們?cè)谶B接數(shù)據(jù)庫(kù)的時(shí)候會(huì)用到一個(gè)關(guān)于寫(xiě)入關(guān)注級(jí)別的問(wèn)題,說(shuō)白了,個(gè)人理解的話就是相當(dāng)于出現(xiàn)問(wèn)題的一個(gè)處理優(yōu)先順序,你可以選擇寫(xiě)入數(shù)據(jù)庫(kù)之前是否需要你確認(rèn)之類的,或者發(fā)生錯(cuò)誤是否忽略之類的等等,如下圖:
| 寫(xiě) 入 級(jí) 別 | 說(shuō) 明 |
|---|---|
| -1 | 網(wǎng)絡(luò)錯(cuò)誤被忽略 |
| 0 | 寫(xiě)確認(rèn)是不必要的 |
| 1 | 請(qǐng)求寫(xiě)確認(rèn) |
| 2 | 寫(xiě)確認(rèn)請(qǐng)求跨主服務(wù)器和副本集中的一個(gè)輔助服務(wù)器 |
| majority | 寫(xiě)確認(rèn)是從副本集的主服務(wù)器請(qǐng)求的 |
用來(lái)創(chuàng)建MongoClient連接的Server對(duì)象的選項(xiàng),如下:

用來(lái)創(chuàng)建MongoClient連接的數(shù)據(jù)庫(kù)連接選項(xiàng),如下:

2、通過(guò)一個(gè)連接字符串連接到MongoDB
這種方式要調(diào)用MongoClient類的connect( )方法。connect使用語(yǔ)法如下:
MongoClient.connect(connString, options, callback)
connString字符串的語(yǔ)法如下:
mongodb://username:password@host:port/database?opations
MongoClient連接字符串組件:
| 選 項(xiàng) | 說(shuō) 明 |
|---|---|
| mongodb:// | 指定字符串使用mongodb的連接格式 |
| username | 驗(yàn)證時(shí)使用的用戶名。可選 |
| password | 身份驗(yàn)證時(shí)使用的密碼??蛇x |
| host | MongoDB服務(wù)器主機(jī)名或者域名。它可以是多個(gè)host:port組合來(lái)連接多個(gè)MongoDB服務(wù)器。 例如:mongodb://host1:270017, host2://270017, host3:270017/testDB |
| port | 連接MongoDB服務(wù)器時(shí)使用的端口。默認(rèn)值是27017 |
| database | 要連接的數(shù)據(jù)庫(kù)的名字。 默認(rèn)為admin |
| options | 連接時(shí)所使用的選項(xiàng)的鍵值對(duì)??梢栽赿bOpt和serverOpt參數(shù)上指定這些選項(xiàng) |
下面,看一個(gè)使用連接字符串方法連接MongoDB數(shù)據(jù)庫(kù)的示例:
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('連接成功!');
// 注銷數(shù)據(jù)庫(kù)
db.logout(function(err, result) {
if ( err ) {
console.log('注銷失敗...');
}
db.close(); // 關(guān)閉連接
console.log('連接已經(jīng)關(guān)閉!');
});
}
});
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Node.js操作MongoDB數(shù)據(jù)庫(kù)實(shí)例分析
- Node.js中使用mongoose操作mongodb數(shù)據(jù)庫(kù)的方法
- Node.js對(duì)MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)模糊查詢的方法
- Node.js連接MongoDB數(shù)據(jù)庫(kù)產(chǎn)生的問(wèn)題
- node.js連接mongoDB數(shù)據(jù)庫(kù) 快速搭建自己的web服務(wù)
- 了不起的node.js讀書(shū)筆記之mongodb數(shù)據(jù)庫(kù)交互
- node.js操作mongoDB數(shù)據(jù)庫(kù)示例分享
- Node.js中Mongodb數(shù)據(jù)庫(kù)操作方法(最新推薦)
相關(guān)文章
使用Node.js寫(xiě)一個(gè)代碼生成器的方法步驟
這篇文章主要介紹了使用 Node.js 寫(xiě)一個(gè)代碼生成器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
利用node.js如何創(chuàng)建子進(jìn)程詳解
之前看多進(jìn)程這一章節(jié)時(shí)發(fā)現(xiàn)這塊東西挺多,寫(xiě)Process模塊的時(shí)候也有提到,今天下午午休醒來(lái)靜下心來(lái)好好的看了一遍,發(fā)現(xiàn)也不是太難理解。所以下面這篇文章主要給大家介紹了關(guān)于利用node.js如何創(chuàng)建子進(jìn)程的相關(guān)資料,需要的朋友可以參考下。2017-12-12
安裝node.js和npm的一些常見(jiàn)報(bào)錯(cuò)
NVM(Node?Version?Manager)是一個(gè)用于在同一機(jī)器上同時(shí)安裝并管理多個(gè)Node.js版本的工具,這篇文章主要給大家介紹了關(guān)于安裝node.js和npm的一些常見(jiàn)報(bào)錯(cuò),需要的朋友可以參考下2023-06-06
輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng)
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng),我們接著改造服務(wù)器,讓請(qǐng)求處理程序能夠返回一些有意義的信息,需要的朋友可以參考下2014-12-12
Nodejs Playwright 2Captcha 驗(yàn)證碼識(shí)別實(shí)現(xiàn)自動(dòng)登陸功能
日常工作當(dāng)中,為了提高工作效率,我們可能會(huì)寫(xiě)腳本來(lái)自動(dòng)執(zhí)行任務(wù),有些網(wǎng)站因?yàn)樾枰脩舻顷?所以腳本的自動(dòng)登陸功能必不可少,這篇文章主要介紹了Nodejs Playwright 2Captcha 驗(yàn)證碼識(shí)別實(shí)現(xiàn)自動(dòng)登陸功能,需要的朋友可以參考下2024-05-05
Node.js完整實(shí)現(xiàn)博客系統(tǒng)詳解
這篇文章主要介紹了Node.js完整實(shí)現(xiàn)一個(gè)博客系統(tǒng)的流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

