0

状況

スポーツ選手のリストがあります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"))

そして、「アスリート」と呼ばれるコレクションを持つ、「アスリート」と呼ばれるローカル mongodb への接続

> 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オブジェクトquerylst_ath

query <- mongo.bson.from.list(lst_ath)
str(query)
Class 'mongo.bson'  atomic [1:1] 0
  ..- attr(*, "mongo.bson")=<externalptr> 
>

問題

queryを使用してオブジェクトをバッチ挿入しようとしてmongo.insert.batch(mongo, db, query)いますが、エラーが発生します:

> mongo.insert.batch(mongo, db, query)
Error in mongo.insert.batch(mongo, db, query) : 
  Expected a list of mongo.bson class objects

で作成queryしたmongo.bson.from.list(lst_ath)ので、私のstr(query)ショーClass 'mongo.bson' atomic [1:1] 0ではエラーがわかりません。

私は何が欠けていますか?

アップデート

@NicE のソリューションと同様に、データベースだけでなく、挿入されるコレクションも定義する必要があります。

> #set the database
> db <- "athletes.athletes"
4

1 に答える 1

3

mongo.bson.from.listベクトルのリストを呼び出すと、配列を作成しているように見えます。「mongo.bson」のリストであるmongo.insert.batch必要があるため、エラーが発生します。query

これを試して:

#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)
于 2015-02-19T16:11:34.337 に答える