如何从 R 在 MongoDB 中批量插入文档?

Posted

技术标签:

【中文标题】如何从 R 在 MongoDB 中批量插入文档?【英文标题】:How do you bulk insert documents in MongoDB from R? 【发布时间】:2015-03-11 06:16:45 【问题描述】:

我在 R 中有一个数据框,我正在尝试将数据框的每一行作为单独的文档批量插入到 MongoDB 中。我能做的最接近的方法是使用以下脚本创建一个文档并将数据框的行作为其子文档。

x <- toJSON(unname(split(score, 1:nrow(score))))
bson <- mongo.bson.from.JSON(x)
mongo.insert(mongo,'abc.abc',x)

另一方面,我希望每一行都作为单独的文档。我也看到上面的方法非常快,但是如果我们在行周围循环,它会大大降低速度

【问题讨论】:

我已经发布了同样的问题(但针对Rmongo 而不是rmongodb)***.com/questions/19564321/…。我也在这个github.com/tc/RMongo/issues/22上提出了一个github问题 我看到这个问题是在2013年提出的。从那以后没有解决这个问题吗? 【参考方案1】:

新的mongolite 包会自动执行此操作:

library(mongolite)
m <- mongo("iris")
m$insert(iris)

【讨论】:

哇,蒙古石真棒! 如果您正在寻找一种从 R 数据帧创建 MongoDB 集合的方法,那么看看 mongolite。您基本上创建了一个集合对象,然后在其上运行方法,例如 Jeroen 示例中的“插入”。超级简单快速。这应该是公认的答案。【参考方案2】:
library(rmongodb)
df <- data.frame(A=c("a","a","b","b"), B=c("X","X","Y","Z"), C=c(1,2,3,4), 
stringsAsFactors = F) 
lst <- split(df, rownames(df))
bson_lst <- lapply(lst, mongo.bson.from.list)
mongo.insert.batch(mongo = mongo, ns = "db.collection", lst = bson_lst)

请不要使用mongo.bson.from.JSON,而是使用mongo.bson.from.list。将 R 对象转换为 bson 对象的方法更加直接(而且速度更快!)。

【讨论】:

非常感谢。这正是我一直在寻找的。不幸的是,我不能赞成你的回答,因为它需要一些我现在不具备的最低声誉:D 不客气。如果您对答案感到满意,请关闭此问题。

以上是关于如何从 R 在 MongoDB 中批量插入文档?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongoid 批量插入/更新?

我应该如何批量上传到 s3 并通过最终回调从 nodeJS 网络服务器插入到 MongoDB?

MongoDB——文档操作(插入文档)

MongoDB怎样批量执行命令

Java/Spring JDBC:批量插入 2 个表:从第 1 批插入获取第 2 个表所需的 FK ID

C# mongodb driver 2.0 - 如何在批量操作中更新插入?