使用Mathematica将文档插入CouchDb

时间:2012-01-17 23:27:39

标签: http wolfram-mathematica couchdb

我正在寻找一种使用Mathematica将文档插入CouchDb数据库的方法。 基于this帖子,我使用以下代码尝试了它:

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

但是当我尝试像这样执行它时,例如:

InsertDocument[110, 1]

我收到以下错误:

  

Import :: erropts:为选项RequestParameters指定的值{key-> 110,value-> 1}无效。 >>

编辑:

根据kguler的评论,我将参数转换为字符串,之前的错误消失了。 我还修复了我的代码示例中的遗忘},并使用key参数删除了url的串联。 现在我遇到了一个不同的错误:

  

Throw :: nocatch:Uncaught Throw [Null,Utilities URLTools Private URLTOOLSException[Utilities URLTools Private BADCONNECTION,http://couchdburl/database/]]返回顶级。 >>

我尝试使用curl向couchDb url发出请求,使用虚拟文档:

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

并且响应如预期:

{ “OK”:真, “ID”: “57291ccea74c455beb2d7a37fe001624”, “REV”: “1-967a00dff5e02add41819138abb3284d”}

我是否仍然缺少应该在导入功能中使用的任何选项? 也许有一些选项可以将内容类型设置为application / json?

1 个答案:

答案 0 :(得分:1)

我设法遵循this SO问题中提出的相同想法。

遇到一些问题后,以下代码有效:

<< JLink`

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

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

method@setRequestHeader["Content-Type", "application/json"];

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

method@setRequestEntity[entity]

client@executeMethod[method]