2015年8月22日 星期六

[Node.js]mongolab & mongodb 初探

在撰寫程式或工具的時候難免需要使用到資料庫來作資料的存放、讀取等,
而在Node.js世界中常常會看到Mongodb的名字。

mongodb是一個NoSQL(Not Only SQL)的Database,屬於文件導向的資料庫,利用JSON格式,將一份(筆)文件存放至DB中,由於JSON格式的特性,在同一個Document(Table)中,可以存放不同數量屬性的資料於同一份文件中,可以不用事先定義好資料欄位。

而在這篇文章中將記錄利用mongolab的雲端mongodb服務來執行資料庫的存取。
mongolab提供了免費的方案,限制容量大小500MB,但開發練習等個人使用的話,已經非常夠用了。
但您也可以到mongodb的官網下載安裝,只需要將下面介紹的資料庫存取url改成本機的即可。

首先至mongolab官網註冊帳號

登入後可以看到類似以下的畫面,接著建立一個新的資料庫



接著選擇Single-node下的500MB方案(免費!!),並填寫此資料庫的名稱,點選建立即完成資料庫的建置。





接下來點選您新建立的資料庫來進行資料庫存取帳號密碼的設定,示範所設定的帳號密碼為admin/123。





這樣就完成資料庫的建置與設定了,可以看到畫面上方有連置資料庫的URL,已這裡的範例來看,資料庫URL為
mongodb://admin:123@ds035563.mongolab.com:35563/howardtest

接下來就可以回到Node.js,開始寫程式囉!
第一步,利用npm安裝mongodb以及assert兩個Node.js套件,mongodb即為Node.js使用mongodb的driver,而assert即為驗證用的套件。

接著,建立app.js來連結mongodb。

var MongoClient = require('mongodb').MongoClient
  , assert = require('assert');

// Connection URL
var url = 'mongodb://admin:123@ds035563.mongolab.com:35563/howardtest';

MongoClient.connect(url, function (err, db) {
    assert.equal(null, err);
    console.log("Connected correctly to server");
});

成功連上資料庫後接下來就是來定義新增資料的方法啦!

var insertDocuments = function (db, callback) {
    var collection = db.collection('userProfile');
    collection.insert([{name: 'Howard', age: 25 }, 
 {name: 'Smilee', age: 18}], 
 function (err, result) {
  assert.equal(err, null);
  assert.equal(2, result.result.n);
  assert.equal(2, result.ops.length);
  console.log("Inserted 2 documents into the userProfile collection\n");
  callback(result);
 });
}

collection可以想像成類似SQL資料庫的Table,而在mongodb中可以不用事先定義collection,當執行新增後就會自行的新增該份collection。

再來就是定義讀取資料庫中資料的方法!

var findDocuments = function (db, callback) {
    // Get the documents collection
    var collection = db.collection('userProfile');
    // Find some documents
    collection.find({}).toArray(function (err, docs) {
        callback(docs);
    });
}

在取得資料find()方法中也可以加入條件來做查詢,例如:collection.find({name: 'Howard'}),這樣就會只查詢name為Howard的資料出來。
這些都完成後,就可以回到連接資料庫的方法中來使用這兩個方法。

MongoClient.connect(url, function (err, db) {
    assert.equal(null, err);
    console.log("Connected correctly to server");
    insertDocuments(db, function () {
        findDocuments(db, function (docs) {
   console.log("Found the following records");
   for (var i in docs) {
    console.log(docs[i].name + " is " + docs[i].age + " years old.");
   }
            db.close();
        });
    });
});

這樣就完成針對mongodb簡單的寫入與讀取了。
整個程式的流程為成功連上資料庫後新增兩筆資料,完成新增資料後再執行讀取方法取得資料庫中的資料。

嘿嘿~看來有了mongodb說不定就可以讓我的聊天室增加記錄訊息的功能了!!
最後,奉上node.js mongodb driver 文件:
http://mongodb.github.io/node-mongodb-native/

沒有留言:

張貼留言