2012年10月1日 星期一

Using temp view in cradle

當使用cradle作為node連線couchdb時候
要用temp view來動態撈取資料可參考此篇

這邊是希望doc._id欄位字串中有帶入給定參數的
就撈出來呈現...

var util = require('util')                                                                                                                                               
  , cradle = require('cradle')
  , db = new(cradle.Connection)('http://xxx.xxx.xxx.xxx', 5984, {
    auth: { username: dbusername, password: dbpassword },
    cache: true,
    raw: false
  }).database('dbname');

//Write module
exports.test = function() {
  db.temporaryView({
    //If you want to bring a parameter into tmp view, you need to also have "" in your parameter
    map: 'function (doc) { if (doc && doc._id && doc._id.indexOf("'+ params +'") >=0 ) emit(doc._id, doc); }' 
  }, function (err, res) {
    if (err){
      console.log('[ERROR]:'+err);
    }   
    callback(err, res);
  }); 
}

//Use it
this.test();

需要注意的是,temporaryView中帶入的是json參數,由json帶入map function
因此最好將整個map function定義成變數
然後要帶入的變數就可以夾在中間...只是要注意到變數的兩邊要給他雙引號起來
因為轉成字串時候,需要有雙引號,才會是單純的字串,而不會又變回變數...