我在R中有一个数据框,我试图将数据帧的每一行批量插入MongoDB中的单独文档。我能做的最接近的是使用以下脚本创建一个文档,并将dataframe行作为其子文档。
x <- toJSON(unname(split(score, 1:nrow(score))))
bson <- mongo.bson.from.JSON(x)
mongo.insert(mongo,'abc.abc',x)
另一方面,我希望每一行都是单独的文档。我也看到上面的方法非常快,但是如果我们绕着行循环,它会大大降低速度
答案 0 :(得分:8)
新的mongolite
包会自动执行此操作:
library(mongolite)
m <- mongo("iris")
m$insert(iris)
答案 1 :(得分:3)
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对象的方式要简单得多(而且速度要快得多!)。