2011-08-17 91 views
2

Access複製過濾器是有可能通過請求視圖,FE使用的CouchDB(http://wiki.apache.org/couchdb/Replication#Filtered_Replication)的複製過濾器特徵:的CouchDB - 鑑於

。 ../_view/candidates?filter=hrtool/myfilter

這將是很好的基礎上,usersession過濾文件或提前UserRole的

感謝

FADH

回答

1

這是可能的一個_list功能。

列表函數是Javascript代碼其中預處理將其發送到客戶端之前的視圖輸出。可以修改視圖輸出以任何方式,例如通過過濾某些行。

function(head, req) { 
    // lists.filtered: filter view output by using a replication filter. 

    var ddoc = this; // A common trick to explicitly identify the design document. 
    function error(reason) { 
    start({"code":400, "headers":{"content-type":"application/json"}}); 
    send(JSON.stringify({"error":reason})); 
    } 

    var filter_name = req.query.filter; 
    if(!filter_name) 
    return error("Need filter_name parameter"); 

    var filter_src = ddoc.filters[filter_name]; 
    if(!filter_src) 
    return error("Invalid filter_name: " + filter_name); 

    // Not 100% sure on this, you could also use new Function(args, src); 
    // In the worst-case, the couchapp tool has the !code tool to copy code. 
    var filter = eval(filter_src); // Not 100% sure on this 
    var row; 

    start({"headers":{"content-type":"application/json"}}); 
    send('{"rows":[\r\n'); 

    var first = true; 
    while(row = getRow()) { 
    if(filter(row)) { // Or perhaps use include_docs=true and filter(row.doc) 
     if(! first) 
     send(",\r\n"); 
     first = false; 
     send(JSON.stringify(row)); 
    } 
    } 
    send("]}\r\n"); 
} 

使用此列表 「過濾器」 就像任何過濾功能:

GET /db/_design/example/_list/filtered/candidates?filter=myfilter&include_docs=true