2012-01-17 121 views
3

我正在尋找一種使用Mathematica將文檔插入到CouchDb數據庫的方法。 基於this後,我嘗試使用下面的代碼:使用Mathematica將文檔插入到CouchDb

InsertDocument[key_, value_] := 
With[{url = 
    "http://couchdburl/database/"}, 
Import[url, "XML", "RequestMethod" -> "POST", 
"RequestParameters" -> {"key" -> key, "value" -> value}]] 

但是當我嘗試這樣執行它,比如:

InsertDocument[110, 1] 

我收到以下錯誤:

Import::erropts: The value {key->110,value->1} specified for the option RequestParameters is invalid. >>

編輯:

關注kguler的評論,I conve將參數設置爲字符串,並且以前的錯誤消失。 我也在我的代碼示例中修復了被遺忘的},並刪除了URL與關鍵參數的連接。 現在我遇到了不同的錯誤:

Throw::nocatch: Uncaught Throw[Null,Utilities URLTools Private URLTOOLSException[Utilities URLTools Private BADCONNECTION, http://couchdburl/database/]] returned to top level. >>

我試着用捲曲CouchDB的URL提出請求,使用僞文檔:

curl -X POST http://couchdburl/database/ -H "Content-Type: application/json" -d {} 

,反應也如預期:

{ 「OK」:真實的, 「ID」: 「57291ccea74c455beb2d7a37fe001624」, 「轉」: 「1-967a00dff5e02add41819138abb3284d」}

我仍然失蹤,應該是任何選項在導入功能中使用? 也許有些選項將content-type設置爲application/json?

+1

你有沒有嘗試使傳遞的參數字符串('InsertDocument [「100」,「1」]')或進行最後一行代碼中的' 「RequestParameters」 - > {「key」 - > ToString @ key,「value」 - > ToString @ value}]]'?順便說一句,你在最後一行缺少右括號'}'。 – kglr 2012-01-18 02:47:25

回答

1

我設法按照與this SO問題中提出的相同的想法做到這一點。

一些問題之後,下面的代碼工作:

<< JLink` 

client = JavaNew["org.apache.commons.httpclient.HttpClient"]; 

method = JavaNew["org.apache.commons.httpclient.methods.PostMethod", 
    "http://couchdburl/database/"]; 

[email protected]["Content-Type", "application/json"]; 

entity = 
JavaNew["org.apache.commons.httpclient.methods.StringRequestEntity", 
    "{\"key\":\"10\",\"value\":\"0\"}", "application/json", Null] 

[email protected][entity] 

[email protected][method]