小弟的規劃表 - http://blog.kerkerj.in/blog/2014/11/01/planning/
好讀版 - http://blog.kerkerj.in/blog/2014/10/12/api-d12/
今天要使用 Node.js 的 mongodb driver 來操作 DB
一樣先開啟虛擬機並且登入吧
會使用到的套件是:
mongodb -> mongodb native driver
或許有人有看過 mongoose -> 官網
算是 MongoDB 的 ORM,我們在這邊如果有時間的話再簡單瞭解一下,
現在先使用 native driver 來操作
我們在這邊就不裝全域套件了,裝在 API 專案裡面
並且使用 -save 來將相依性寫入 package.json 裡
$ cd /vagrant/API/
$ npm install mongodb -save
從虛擬機回到電腦的資料夾中,在虛擬機資料夾的 API 資料夾中,
今天我們先不和 express 搭配,因此就是純操作 node.js + mongodb module
新增一個 mongoTest.js
我們先來連線到 MongoDB,連線的方式有很多,下面是其中一種方式,
// 先宣告用的到的東西
var MongoClient = require('mongodb').MongoClient
, Server = require('mongodb').Server
, options = { auto_reconnection: true, poolSize: 10 };
// Server 設定
var mongoClient = new MongoClient(new Server('localhost', 27017, options));
// 開啟連線
mongoClient.open(function(err, mongoClient) {
var db1 = mongoClient.db("testDB");
if (!err) {
console.log("Connected!");
}
mongoClient.close();
console.log("Closed!");
});
回到虛擬機執行
$ node mongoTest.js
Connected!
Closed!
接著用另外一種連接方式,介紹 CRUD 的操作:
var mongoClient = require('mongodb').MongoClient;
mongoClient.connect('mongodb://localhost:27017/testDB', function(err, db) {
if(err) throw err;
// Data
var todo1 = {todo: "Buy books", time: "2014/10/11", who: "myself"};
var todo2 = {todo: "Buy milk", time: "2014/10/15", who: "brother"};
var todo3 = {todo: "Wash cats", time: "2014/11/21", who: "myself"};
var collection = db.collection('todoTest');
var where = {todo: "Buy milk"};
// 新增資料
collection.insert(todo1, function(err, docs) {
console.log(docs);
});
collection.insert(todo2, function(err, docs) {
console.log(docs);
});
collection.insert(todo3, function(err, docs) {
console.log(docs);
});
// 更新資料
collection.update(where, { $set: { time: "2014/12/25"} }, function(err) {
console.log(err);
});
// 刪除某筆資料
collection.remove(where, function(err) {
console.log(err);
});
// 查詢某筆資料
collection.find(where).toArray(function(err, results) {
console.dir(results);
});
// 查詢所有資料
collection.find().toArray(function(err, results) {
console.dir(results);
});
});
請注意,以上操作由於 javascript async 特性的關係,
每個操作是會同時間送出,不同時間回送,看操作的運算時間而定
因此若要依順序性的話,一是使用 callback,二是使用 async.js
後面應該會提到 XD
將這些程式碼存到 js file 裡,將某些行先註解掉,執行看看就可以略知一二了,
可以同時搭配終端機直接到 DB 查看
p.s. 大家可能會覺得這樣的方式很麻煩,MongoDB 有沒有好用的 client 來管理 DB 呢
我推薦 RoboMongo,多平台,且可以直接輸入指令,蠻方便的,
那如果是用我們現在的虛擬機的方式,要如何使用 RoboMongo ?
首先,虛擬機的 DB 必須先開啟外部網路可以連線,
注意! 我們目前並沒有創立使用者帳號密碼,不需要驗證即可進入 DB,這樣的做法只限於 demo, 與虛擬機中使用
正式環境還是必須建立使用者帳號密碼
先進到虛擬機更改 db 設定:
$ sudo nano /etc/mongod.conf
將 bind_ip = 0.0.0.0
按下 ctrl+x 選擇 Y 存檔
重開 mongodb
$ sudo service mongod restart
若已經下載過 RoboMongo,開啟並輸入欲連線的 DB 設定:
就可以連進去管理了!
再次提醒,這樣的做法只限於虛擬機及 demo 中測試
正式環境要嘛建立使用者帳號密碼
要嘛就是讓 DB 只限本機存取,請記住這件事情哦~