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

标签 json r mongodb mongolite

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

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

最佳答案

如果您使用 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

但是,我的理解是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 结构,我们可以使用 rmongodb 包中的 mongo.bson.from.json 函数

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 represents JSON documents in binary-encoded format called BSON behind the scenes. BSON extends the JSON model to provide additional data types and to be efficient for encoding and decoding within different languages

引用:JSON and BSON

关于json - 使用 mongolite R 包将 json 对象插入 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35979720/

相关文章:

r - 每行中最后一次出现的值的列索引

javascript - Mongoose : update nested document array

linux - 如何在 Ubuntu 中将 mongodb(从 tar.gz 中提取)作为服务运行?

r - 一张 ggplot 包含多个数据集

在服务列表中找不到 MongoDB 服务

java - @JsonAny(S|G}etter 从 1.7.4 更改为 1.9.3?

php - 如何从此 JSON 数组获取变量值?

android - 如何在android中获取Wordpress网站数据库?

python - 在 python 中更新 json 字典时出现奇怪的输出

r - 哪个有什么用?