使用mongolite R包将json对象插入MongoDB

时间:2016-03-14 04:47:04

标签: json r mongodb mongolite

在R中有很多用于处理MongoDB的软件包。我开始使用'mongolite'软件包,因为我使用'jsonlite'和'mongolite'构建在'jsonlite'之上。但是,我有点疑惑,为什么'mongolite'中的插入函数不允许插入json对象(帮助说它插入数据帧)?

我应该使用什么软件包来存储json对象并进行简单的查询?

2 个答案:

答案 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模型以提供其他数据类型,并且可以有效地在不同语言中进行编码和解码

参考:JSON and BSON

答案 1 :(得分:1)

mongolite的开发版现在支持直接插入嵌套列表或json,请参阅https://github.com/jeroenooms/mongolite/issues/42

您还可以使用m$iterate()m$iterate()$batch()查询并取回嵌套列表。