我需要從R創建CouchDB設計文檔,以便其他人可以在不學習或切換到CouchDB的情況下使用我的代碼。從R創建CouchDB設計文檔
此鏈接對於學習如何使用R:http://digitheadslabnotebook.blogspot.com/2010/10/couchdb-and-r.html中的CouchDB非常有用。以下是我可以和填充數據庫:
library(RJSONIO)
library(RCurl)
httpPUT("http://127.0.0.1:5984/fooddb") # Creates the fooddb database
# Add two documents
fromJSON(getURL("http://127.0.0.1:5984/fooddb", customrequest='POST', httpheader=c('Content-Type'='application/json'), postfields=toJSON(list(day="Monday", dinner="Pasta"))))
fromJSON(getURL("http://127.0.0.1:5984/fooddb", customrequest='POST', httpheader=c('Content-Type'='application/json'), postfields=toJSON(list(day="Tuesday", dinner="Soup"))))
在CouchDB的Web的GUI蒲團,我手動創建這個觀點(這是一步我想來自R做的)。
function(doc) {
emit(doc.day, doc.dinner);
}
而且早在RI可以得到視圖結果:
view.results <- fromJSON(httpGET("http://127.0.0.1:5984/fooddb/_design/fooddoc/_view/foodview"))
view.results.df <- do.call(rbind.data.frame, view.results$rows)
colnames(view.results.df) <- c("key", "day", "dinner")
若要從R中的觀點,我保存視圖文件,並試圖把它變成CouchDB的
writeLines(toJSON("function(doc) {
emit(doc.day, doc.dinner);
}"),
"foodview.json")
fromJSON(getURL("http://127.0.0.1:5984/fooddb/_design/foodview", customrequest='PUT', httpheader=c('Content-Type'='application/json'), postfields="@foodview.json"))
但這會導致(「bad_request」「invalid_json」)。
什麼可能是錯的?我懷疑最後一行或「writeLines」命令,但沒有找到讓他們工作的方法。
更新:基於Kxepals的良好答案,我創建了一個新的writeLines,創建一個可以使用curl進行分析的視圖。
writeLines("{
\"_id\": \"_design/foodview\",
\"views\": {
\"foodview\": {
\"map\": \"function(doc) {emit(doc.day, doc.dinner);}\"
}
}
}"
, "foodview.json")
但是下面這行仍然會給出同樣的錯誤。現在我確定錯誤在這一行。
fromJSON(getURL("http://127.0.0.1:5984/fooddb/_design/foodview", customrequest='PUT', httpheader=c('Content-Type'='application/json'), postfields="@foodview.json"))
感謝。這解決了問題的第一部分。現在我只需要獲取R部分。 – Chris