在R中有很多用于处理MongoDB的软件包。我开始使用'mongolite'软件包,因为我使用'jsonlite'和'mongolite'构建在'jsonlite'之上。但是,我有点疑惑,为什么'mongolite'中的插入函数不允许插入json对象(帮助说它插入数据帧)?
我应该使用什么软件包来存储json对象并进行简单的查询?
答案 0 :(得分:4)
如果您使用jsonlite
,仍然可以使用mongolite
来插入数据,但只有在时才可以强制转换为data.frame
(使用{ {1}})。例如:
fromJSON
但是,我的理解是js <- '[
{
"id": 1,
"val": "a"
},
{
"id": 2,
"val": "b"
},
{
"id": 3,
"val": "c"
}
] '
library(jsonlite)
library(mongolite)
mongo <- mongo(collection = "test", db = "test", url = "mongodb://localhost",
verbose = TRUE)
mongo$insert(fromJSON(js))
# Complete! Processed total of 3 rows.
# [1] TRUE
包只会 插入mongolite
。例如,采用更复杂的data.frames
结构,您会看到我们无法使用JSON
mongolite
要插入更复杂的js <- '{"foo":[{"id":1,"val":"a"},{"id":2,"val":"b"},{"id":3,"val":"c"}],"bar":[[{"id":1,"val":"a"},{"id":2,"val":"b"},{"id":3,"val":"c"}]]}'
## if we try to insert this using mongolite we get an error
## because it is not a data.frame
> mongo$insert(fromJSON(js))
Error: is.data.frame(data) is not TRUE
结构,我们可以使用JSON
包中的mongo.bson.from.json
函数
rmongodb
注意library(rmongodb)
mongo <- mongo.create()
mongo.is.connected(mongo)
# [1] TRUE
db <- "test"
coll <- "test"
bs <- mongo.bson.from.JSON(js)
mongo.insert(mongo, ns = paste0(db ,".", coll), b = bs)
# [1] TRUE
实际存储 BSON :
MongoDB在幕后以二进制编码格式表示称为BSON的JSON文档。 BSON扩展了JSON模型以提供其他数据类型,并且可以有效地在不同语言中进行编码和解码
答案 1 :(得分:1)
mongolite的开发版现在支持直接插入嵌套列表或json,请参阅https://github.com/jeroenooms/mongolite/issues/42
您还可以使用m$iterate()
或m$iterate()$batch()
查询并取回嵌套列表。