1. 程式人生 > >[MongoDB學習筆記-02] Node.js連線MongoDB的兩種方法

[MongoDB學習筆記-02] Node.js連線MongoDB的兩種方法

這裡寫圖片描述

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資料庫我們有兩種方法可選擇:

  1. 通過例項化mongodb模組中提供的mongodbClient類,然後使用這個例項化的物件來建立和管理mongodb連線;
  2. 使用字串進行連線;

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('連線已經關閉!');
                            });
                        }

});