在撰寫程式或工具的時候難免需要使用到資料庫來作資料的存放、讀取等,
而在Node.js世界中常常會看到Mongodb的名字。
mongodb是一個NoSQL(Not Only SQL)的Database,屬於文件導向的資料庫,利用JSON格式,將一份(筆)文件存放至DB中,由於JSON格式的特性,在同一個Document(Table)中,可以存放不同數量屬性的資料於同一份文件中,可以不用事先定義好資料欄位。
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說不定就可以讓我的聊天室增加記錄訊息的功能了!!
沒有留言:
張貼留言