2013-02-02 56 views
1

嗨,所以我對CouchDB來說是新手,看起來不錯,但是真的很困難,因爲一定很容易做!在CouchDB中,你如何從REST調用參數中獲取參數

我有結構爲文件:

{ 
    "_id" : "245431e914ce42e6b2fc6e09cb00184d", 
    "_rev": "3-2a69f0325962b93c149204aa3b1fa683", 
    "type": "student", 
    "studentID": "12345678", 
    "Name": "Test", 
    "group: "A" 
} 

,願與查詢,如http://couchIP/student?group=A或類似的東西來訪問它們它們。意見是我需要在這裏?我不明白如何從視圖中的Map函數中的查詢中獲取參數。例如:

function(doc,req) { 
    if(req.group==='A'){ 
     emit(doc.id, doc.name); 
    } 
} 

是我的沙發是如何工作的錯誤或什麼,這裏是我的問題的理解?在此先感謝,我相信這是沙發101

已經通過http://guide.couchdb.org/通讀,但它並沒有真正回答這個問題!

+0

查看功能不是也不應該依賴於請求狀態。您需要通過doc.group發佈記錄,並使用'key'查詢參數查詢視圖。如果您仍然認爲,您的視圖需要與用戶請求進行交互,而不是使用列表功能。 – Kxepal

+0

就像我說的我是一個初學者,基本上我正在尋找一個沙發功能,我可以使http:// query + params - 以某種方式使用這些參數來輸入或檢索數據,但我無法找回那些如果有道理的話,或者在沙發上使用它們。將看看列表函數,謝謝 – John

回答

1

您需要意見才能達到預期結果。

在設計文檔視圖中定義以下映射函數。 (讓我們命名視圖「byGroup」,並承擔此住在一個名爲設計文件「_design /生」)

function(doc) { 
    if(doc.group){ 
    emit(doc.group,null); 
    } 
} 

結果可以從以下網址獲得

http://couchIP:5984/dbname/_design/students/_view/byGroup?startkey="A"&endkey="A"&include_docs=true 

要具有友好的URL的CouchDB還提供了url重寫選項。

1

您需要進一步閱讀有關視圖以及它們返回鍵/值對的相關性。

目前還不清楚你想從視圖返回什麼,所以我猜。如果你想返回整個文檔您需要創建一個類似的看法:

function (doc) { emit(doc.group, doc) }; 

這將發射組的名稱,你可以查找對,整個文檔會當你看的價值返回的關鍵它起來。

如果你只想有機會獲得你想要做的事就像那些用戶的名字:

function (doc) { emit(doc.group, doc.name) }; 
+0

我的問題不在於我想要返回的內容,而是如何從查詢中獲取參數,或者視圖是否是我需要執行的操作。這裏是我存儲的視圖之一,'http:// localhost:5984/spms/_design/test/_view/test'現在我該如何添加一個參數來使用例如'http:// localhost:5984/spms/_design/test/_view/test?ID = xxx' - 我的主要問題是我無法在map函數中檢索參數的值。 – John

1

你的問題是從什麼一個view確實誤解。視圖使用map/reduce來生成數據的表示。您無法控制查詢在查詢中的輸出,因爲該視圖僅根據數據庫文檔中的更改進行更新。

使用list也不是一個好的選擇。看起來您可以在list中使用您的請求知識根據查詢參數生成不同的輸出,但這是錯誤的,因爲couchdb使用ETags進行緩存,這意味着無論您的列表如何,大部分時間您都會得到相同的答案因爲底層文檔不會發生變化。在這種情況下,欺騙couchdb有一個技巧,這意味着使用兩個不同的交替用戶,但我甚至不會嘗試這種方式,因爲當然有更簡單的方法來實現您的目標,並且您可以使用group作爲關鍵字來解決您的問題在你的地圖功能中。

+0

嗨joscos,謝謝你的回答。好吧,現在我很困惑。我認爲REST API可以提供全套的DB功能,例如選擇組是A,B等所有文件。我認爲這將是基本功能,你不需要傻瓜或黑客沙發數據庫,​​因爲這幾乎每個人都需要從數據庫!!? – John

+1

好吧,couchdb有點不同。您沒有選擇運行即席查詢。這是一個限制,但如果你使用視圖和查詢API,你仍然可以做很多事情。我建議您閱讀以下內容以瞭解您可以執行的操作以及如何執行此操作:http://guide.couchdb.org/draft/cookbook.html – joscas

+1

另外,如果您錯過了非常多的SQL,但仍需要某些功能,搭配沙發,那麼mongodb是一個不錯的選擇。 – joscas