MongoDB は,ドキュメントデータモデルの機能をもつデータベース管理システム
R システムの CRAN の URL: https://cran.r-project.org/
R
install.packages("rmongodb") install.packages("rjson")
2つのラッパー insertMongo, getMongo を定義し、 このラッパーを使って、データフレームの mongodb への格納と取り出しを行なってみます
ここでは、toJSON, fromJSON という2つの関数を使って JSON との変換を行なっています.
library("rmongodb") library("rjson") insertMongo <- function(mongo, ns, key, val) { if (mongo.is.connected(mongo)) { a <- mongo.insert(mongo, ns, list(name=key, value=toJSON(val))) return(a) } } getMongo <- function(mongo, ns, key) { if (mongo.is.connected(mongo)) { x <- mongo.find.one(mongo, ns, list(name=key)) return(fromJSON(mongo.bson.to.list(x)$value)) } return(NULL) } m <- mongo.create(host="127.0.0.1") mongo.get.databases(m) mongo.get.database.collections(m, db="hoge") # insertMongo(m, "hoge.iris", "iris", iris) getMongo(m, "hoge.iris", "iris")
注意点としては、 元のテーブルが Factor (因子) を含むとき、mongodb に格納したあと、読み込むと、Factor (因子)の部分が文字列になる.
str(getMongo(m, "hoge.iris", "iris") ) str(iris)
今後は、 toJSON, fromJSON を使用しないように、 2つのラッパー insertMongo, getMongo を定義してみます。
library("rmongodb") library("rjson") insertMongo <- function(mongo, ns, key, val) { if (mongo.is.connected(mongo)) { a <- mongo.insert(mongo, ns, list(name=key, value=val)) return(a) } } getMongo <- function(mongo, ns, key) { if (mongo.is.connected(mongo)) { x <- mongo.find.one(mongo, ns, list(name=key)) return(mongo.bson.to.list(x)$value) } return(NULL) } m <- mongo.create(host="127.0.0.1") mongo.get.databases(m) mongo.get.database.collections(m, db="hoge2") # insertMongo(m, "hoge2.iris", "iris", iris) getMongo(m, "hoge2.iris", "iris")
今度は、 元のテーブルが Factor (因子) を含むとき、mongodb に格納したあと、読み込むと、Factor (因子)の部分が数値になる.(こちらの方が不便かなという気がします)。