2012-01-17 56 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]