首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mongolite R软件包将json对象插入MongoDB

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

Stack Overflow用户
提问于 2016-03-14 04:47:03
回答 2查看 4.6K关注 0票数 2

在R中有很多处理MongoDB的包,我开始使用'mongolite‘包,因为我使用'jsonlite’和'mongolite‘构建在'jsonlite’之上。但是,我有点困惑,为什么'mongolite‘中的插入函数不允许插入json对象(help说它插入数据格式)?

我应该使用哪个包来存储json对象并执行简单的查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-14 08:42:30

如果使用jsonlite,仍然可以使用mongolite插入数据,但是只有当也可以强制使用data.frame (使用fromJSON)时,才能使用。例如:

代码语言:javascript
复制
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插入它

代码语言:javascript
复制
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结构,我们可以使用rmongodb包中的mongo.bson.from.json函数

代码语言:javascript
复制
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

注意到mongodb实际上存储了BSON

MongoDB在幕后以二进制编码格式BSON表示JSON文档。BSON扩展了JSON模型,以提供额外的数据类型,并在不同语言中高效地编码和解码

参考资料:JSON和BSON

票数 5
EN

Stack Overflow用户

发布于 2016-09-25 04:11:41

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35979720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档