r - rmongodb batch insert error: Expected a list of mongo.bson class objects
r - rmongodb batch insert error: Expected a list of mongo.bson class objects
情况
我有一份运动员名单lst_ath
lst_ath <- structure(list(`1` = structure(c("1125266", "ath_1"), .Names = c("id",
"name")), `2` = structure(c("1125265", "ath_2"), .Names = c("id",
"name")), `3` = structure(c("1125264", "ath_3"), .Names = c("id",
"name")), `4` = structure(c("1125263", "ath_4"), .Names = c("id",
"name")), `5` = structure(c("1125262", "ath_5"), .Names = c("id",
"name")), `6` = structure(c("1125261", "ath_6"), .Names = c("id",
"name")), `7` = structure(c("1125260", "ath_7"), .Names = c("id",
"name")), `8` = structure(c("1125259", "ath_8"), .Names = c("id",
"name")), `9` = structure(c("1125258", "ath_9"), .Names = c("id",
"name")), `10` = structure(c("1125257", "ath_10", "(NZ)"), .Names = c("id",
"name", "country"))), .Names = c("1", "2", "3", "4", "5", "6",
"7", "8", "9", "10"))
以及与名为 "athletes" 的本地 mongodb 的连接,以及名为 "athletes"
的集合
> library(rmongodb)
> mongo <- mongo.create()
>
> #check connection
> mongo.is.connected(mongo)
[1] TRUE
>
> #set the database
> db <- "athletes"
> mongo.get.database.collections(mongo, db)
[1] "athletes.athletes"
还有一个 mongo.bson
对象 query
来自列表 lst_ath
query <- mongo.bson.from.list(lst_ath)
str(query)
Class 'mongo.bson' atomic [1:1] 0
..- attr(*, "mongo.bson")=<externalptr>
>
问题
我正在尝试使用 mongo.insert.batch(mongo, db, query)
批量插入 query
对象,但出现错误:
> mongo.insert.batch(mongo, db, query)
Error in mongo.insert.batch(mongo, db, query) :
Expected a list of mongo.bson class objects
当我用 mongo.bson.from.list(lst_ath)
创建 query
时,我的 str(query)
显示 Class 'mongo.bson' atomic [1:1] 0
我无法找出错误。
我错过了什么?
更新
除了@NicE 的解决方案,我还需要定义要插入的集合,而不仅仅是数据库,即:
> #set the database
> db <- "athletes.athletes"
当您在向量列表上调用 mongo.bson.from.list
时,您似乎正在创建一个数组。因为 mongo.insert.batch
需要 query
成为 'mongo.bson' 的列表,所以它给你一个错误。
试试这个:
#make a mongo bson for each element of lst_ath
query <- lapply(lst_ath,function(x){mongo.bson.from.list(as.list(x))})
#check that query is a list of mongo.bson objects
str(query)
#List of 10
# $ 1 :Class 'mongo.bson' atomic [1:1] 0
# .. ..- attr(*, "mongo.bson")=<externalptr>
# $ 2 :Class 'mongo.bson' atomic [1:1] 0
# .. ..- attr(*, "mongo.bson")=<externalptr>
# $ 3 :Class 'mongo.bson' atomic [1:1] 0
# .. ..- attr(*, "mongo.bson")=<externalptr>
#insert them
mongo.insert.batch(mongo, db, query)
情况
我有一份运动员名单lst_ath
lst_ath <- structure(list(`1` = structure(c("1125266", "ath_1"), .Names = c("id",
"name")), `2` = structure(c("1125265", "ath_2"), .Names = c("id",
"name")), `3` = structure(c("1125264", "ath_3"), .Names = c("id",
"name")), `4` = structure(c("1125263", "ath_4"), .Names = c("id",
"name")), `5` = structure(c("1125262", "ath_5"), .Names = c("id",
"name")), `6` = structure(c("1125261", "ath_6"), .Names = c("id",
"name")), `7` = structure(c("1125260", "ath_7"), .Names = c("id",
"name")), `8` = structure(c("1125259", "ath_8"), .Names = c("id",
"name")), `9` = structure(c("1125258", "ath_9"), .Names = c("id",
"name")), `10` = structure(c("1125257", "ath_10", "(NZ)"), .Names = c("id",
"name", "country"))), .Names = c("1", "2", "3", "4", "5", "6",
"7", "8", "9", "10"))
以及与名为 "athletes" 的本地 mongodb 的连接,以及名为 "athletes"
的集合> library(rmongodb)
> mongo <- mongo.create()
>
> #check connection
> mongo.is.connected(mongo)
[1] TRUE
>
> #set the database
> db <- "athletes"
> mongo.get.database.collections(mongo, db)
[1] "athletes.athletes"
还有一个 mongo.bson
对象 query
来自列表 lst_ath
query <- mongo.bson.from.list(lst_ath)
str(query)
Class 'mongo.bson' atomic [1:1] 0
..- attr(*, "mongo.bson")=<externalptr>
>
问题
我正在尝试使用 mongo.insert.batch(mongo, db, query)
批量插入 query
对象,但出现错误:
> mongo.insert.batch(mongo, db, query)
Error in mongo.insert.batch(mongo, db, query) :
Expected a list of mongo.bson class objects
当我用 mongo.bson.from.list(lst_ath)
创建 query
时,我的 str(query)
显示 Class 'mongo.bson' atomic [1:1] 0
我无法找出错误。
我错过了什么?
更新
除了@NicE 的解决方案,我还需要定义要插入的集合,而不仅仅是数据库,即:
> #set the database
> db <- "athletes.athletes"
当您在向量列表上调用 mongo.bson.from.list
时,您似乎正在创建一个数组。因为 mongo.insert.batch
需要 query
成为 'mongo.bson' 的列表,所以它给你一个错误。
试试这个:
#make a mongo bson for each element of lst_ath
query <- lapply(lst_ath,function(x){mongo.bson.from.list(as.list(x))})
#check that query is a list of mongo.bson objects
str(query)
#List of 10
# $ 1 :Class 'mongo.bson' atomic [1:1] 0
# .. ..- attr(*, "mongo.bson")=<externalptr>
# $ 2 :Class 'mongo.bson' atomic [1:1] 0
# .. ..- attr(*, "mongo.bson")=<externalptr>
# $ 3 :Class 'mongo.bson' atomic [1:1] 0
# .. ..- attr(*, "mongo.bson")=<externalptr>
#insert them
mongo.insert.batch(mongo, db, query)