如果您使用,jsonlite您仍然可以使用mongolite来插入您的数据,但前提是它也可以被强制转换为data.frame(使用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
Run Code Online (Sandbox Code Playgroud)
但是,我的理解是该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
Run Code Online (Sandbox Code Playgroud)
要插入更复杂的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
Run Code Online (Sandbox Code Playgroud)
注意mongodb实际存储BSON:
MongoDB 在后台以称为 BSON 的二进制编码格式表示 JSON 文档。BSON 扩展了 JSON 模型以提供额外的数据类型,并在不同语言中高效地进行编码和解码
参考:JSON 和 BSON