2011-11-11 104 views
1

鑑於我的下列文件:與標籤= FOO或標籤的CouchDB查看文檔=條

{ 
    _id: ###, 
    type: "blogpost", 
    title: "First blog post", 
    tag: "tutorial" 
} 

{ 
    _id: ###, 
    type: "blogpost", 
    title: "Second blog post", 
    tag: "report" 
} 

{ 
    _id: ###, 
    type: "blogpost", 
    title: "Third blog post", 
    tag: "tutorial" 
} 

{ 
    _id: ###, 
    type: "blogpost", 
    title: "Fourth blog post", 
    tag: "article" 
} 

現在,我想這樣做是:找到所有相關博客文章,其標籤的文章或報告。

我已經閱讀過文檔,可以對視圖或列表執行POST,允許搜索多個鍵。但是這總是需要cURL或其他東西?

回答

1

如果您需要在您的HTTP調用指定的文章,報告變量,那麼你需要的是一個視圖和一個列表

查看:test_view

function(doc) { 
    if (doc.tag) { 
    emit(doc.tag, doc); 
    } 
}; 

列表:test_list

現在
function(head, req) { 
    start({ 
    "headers": { 
     "Content-Type": "text/html" 
    } 
    }); 
    var row; 
    var tags = req.query.tags; 
    var tagArray = tags.split(','); 
    while(row = getRow()) { 
    if (tagArray.indexOf(row.key) != -1) { 
     send(row.value.tag + ' : ' + row.value.title + '<br>'); 
    } 
    } 
} 

,你可以得到列表/ HTML與 http://yourserver.com:5985/db/_design/test/_list/test_list/test_view?tags=article,report

+0

那麼這就是我正在尋找的。我的JavaScript知識只是非常棒,足以爲我自己找出答案。感謝您的幫助! – Maarten

0

您將需要創建至少一個視圖才能完成此項工作。我對你的需求並不瞭解,所以我只是做一個簡單的例子,不用考慮它是實現你想要的最好的方式。

訪問被褥在http://yourserver.com:5984/_utils,並在您的數據庫中創建一個視圖。您只需要一個映射函數來完成你的要求爲:

function(doc) { 
    if (doc.tag && (doc.tag == "article" || doc.tag == "report")) { 
     emit(doc.tag, doc); 
    } 
} 

如果您保存您的視圖,並調用它articles_or_reports,您可以從您的視圖獲取數據的這個請求:

http://yourserver.com:5984/db/_design/test/_view/articles_or_reports 

將返回

{"total_rows":2,"offset":0,"rows":[ 
{"id":"168ba21f7209994b69336dd8c30041f3","key":"article","value":{"_id":"168ba21f7209994b69336dd8c30041f3","_rev":"1-f033b30522d09c33cbd68332b89c95a7","type":"blogpost","title":"Fourth blog post","tag":"article"}}, 
{"id":"168ba21f7209994b69336dd8c3003139","key":"report","value":{"_id":"168ba21f7209994b69336dd8c3003139","_rev":"1-f7a473afc253972f7cfec62a335dcb23","type":"blogpost","title":"Second blog post","tag":"report"}} 
]} 

但是,這總是需要捲曲或正確的事情?

它取決於您的應用程序,但CouchDB的唯一接口是通過HTTP。有許多語言的圖書館可以將您的互動帶到更高的層次。

+0

Thanx爲您的答案。我確實已經創建了一個視圖和列表。但是,我需要標籤是變量。所以,像這樣:http://yourserver.com:5985/db/_design/test/_view/blogs?key="article,report「。顯然這不起作用,但我需要這樣的東西,而不使用後。 – Maarten