CouchDB是NoSQL資料庫的一支,由Apache維護...(這是我選他的最大原因)
預設CouchDB提供RESTful server,並由該Server作為所有API的接口
同時Apache也有許多專案實作接入CouchDB的各市程式語言的API
本篇以想使用Node.js連接Couchdb的部分為教學
假設大家已經有Node.js以及Couchdb的服務...
安裝Cradle套件
# npm install cradle
設定cradle連線couchdb的connection
db = new(cradle.Connection)(db_address, db_port, {
auth: { username: dbusername, password: dbpassword },
cache: true,
raw: false
}).database(databasename);
上述建構連線資料庫的基本資訊,包含資料庫位置、port號、帳號、密碼等資訊。
而Couchdb的新刪改查說明如下:
新增一筆資料,id=PK,doc=欲儲存文件,callback=儲存結束後回傳:
db.save(id, doc, callback);
刪除一筆資料,id=PK,rev=版本號碼,callback同上:
db.remove(id, rev, callback);
修改一筆資料,id=欲修改之資料id,doc=欲修改的文件內容,callback同上:
db.merge(id, doc, callback);
查詢一筆資料,id=欲查詢的資料id,callback為查詢回傳,包含查詢結果:
db.get(id, callback);
下面為一個整體的資料庫查詢範例,您可以修改內部的一些實作來變成專案中處理CouchDB的幫手∼
var util = require('util')
, cradle = require('cradle')
, dbusername = 'your_db_username'
, dbpassword = 'your_db_password'
, databasename = 'your_db_name'
, db_address = 'your.db.address'
, db_port = 'your_db_port' //default: 5984
, db = new(cradle.Connection)('http://' + db_address, db_port, {
auth: { username: dbusername, password: dbpassword },
cache: true,
raw: false
}).database(databasename);
//如果要做到查詢模組∼
exports.queryExample = function(id, callback) {
console.log('Query of %s', id);
db.get( id, function (err, doc) {
if(err) console.log(err);
callback(err, doc);
});
}
/*
ex: sample data: {_id:"simon","_rev":"3-f84647507bd83e29a6deae7c377a74dc","first_name":"simon","last_name":"su"}
this.queryExample('simon',function(err, doc){
...
})
*/
//如果要做到查尋View∼
exports.queryViewExample = function(id, callback) {
console.log('Query of %s', id);
db.view( 'domain/userDomain',{key: userid}, function (err, doc) {
if(err) console.log(err);
callback(err, doc);
});
}
/*
ex: sample data: [{key:"simon", value:{....}},{key:"jelly", value:{....}},{key:"kimi", value:{....}}...]
this.queryViewExample('simon',function(err, doc){
...
})
*/
//如果要建立一筆資料∼
exports.createExample = function(id, doc, callback) {
db.save(id, doc, function(err, res){
if(err) console.log(err);
callback(err, res);
});
}
/*
ex: sample input doc={name:"simon",phone:"0953609275"}
this.createExample(id, doc, function(err, res){
...
});
*/
//如果要更新一筆資料∼
exports.updateExample = function(id, doc, callback) {
db.merge(id, doc, function (err, res) {
if(err) console.log(err);
callback(err, res);
});
}
/*
ex: sample update data id=key_of_row, doc={...}
this.updateExample(id, doc, function(err, res){
...
});
*/
/** 其他範例:
//Create Database:
var db = c.database('database_name');
db.create();
//Delete Database
db.destroy(callback);
**/