2012-03-24 44 views
1

我是新手編寫couchdb map並減少查詢。我的一個要求是基於我們必須發佈數據的一些密鑰。如下所述,我寫了「成功」。map and reduce queries in couchdb

function(doc) { 
emit([doc.type , doc.category, doc.user], doc); 

}

如果我們給像

http://localhost:5984/test/_design/myDesign/_view/myView?key=["Science","A","John"] 

那麼該數據將被髮射的三倍鍵的值。 但我的疑問是,如果我們爲該視圖提供一個鍵或兩個鍵,如何獲取數據。這意味着對於上述觀點,如果用戶提到了一個像doc.user這樣的密鑰,那麼將基於這三個密鑰來發射用戶數據。還有一個疑問是,我們可以給一個鍵兩個值嗎? ?假設用戶想通過使用相同的視圖獲取數據,用戶名是JOHN或Joe。請提供指導來實現。

謝謝。

回答

1

你可以改變你的看法是這樣的:

emit([doc.user, doc.type, doc.category], doc); 

然後索要

?startkey=["someName"]&endkey=["someName",{}] 

然後在resultlist是具有doc.user = 「someName」 的所有文件,無論其類型和類別

如果您需要更具體的信息,您可以添加另一個標準給您的電話:

?startkey=["someName","someType"]&endkey=["someName","someType",{}] 

然後您將收到帶有someName和someType的所有文檔。

但是你必須用同樣的順序

(鍵字段必須從左至右填寫)如果你需要另一種秩序(尋找僅類型),你必須做第二個發射具有其他命令在相同的功能(或在另一個功能)。

只有在給定的孔密鑰的情況下才能同時詢問兩個密鑰。那麼你必須調用一個視圖py POST與正文

{key = [[Science「,」A「,」John「],[」Science「,」A「,」Joe「]]
+0

感謝您的回覆{keys = [[Science','A','John'],['Science','A','Joe']]}但它不起作用,您能否提供語法在同一時間訪問同一個視圖的兩個值 – veerender 2012-03-26 13:19:44

+0

嘗試用'keys'周圍的引號。 有關更多詳細信息,請參閱[文檔](http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API#Fetch_Multiple_Documents_With_a_Single_Request)。 – 2013-02-10 08:40:15