2015-02-19 4 views
0

Ситуацияг - rmongodb ошибка пакетной вставки: Ожидаемый список класса mongo.bson объектов

У меня есть список спортсменов 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 И объект query из списка lst_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 Я не могу понять ошибку.

Что мне не хватает?

Update

Как и решения @NicE «s, мне также нужно определить коллекцию, которая вставляется в, а не только базы данных, то есть:

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

ответ

2

Похоже, вы делают массив, когда вы вызываете 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) 
+0

Реализация ваш метод У меня есть один и тот же вывод для 'ул (запрос)', как вы, но при вставке теперь я получаю другую ошибку «»: '> mongo.insert.batch (mongo, db, query) '' [1] FALSE '' Предупреждающее сообщение: '' В файле mongo.insert.batch (mongo, db, query): ' – tospig

+1

Оказывается, я также не определил коллекцию, просто использовал базу данных. Я должен был установить 'db <-" athletes.athletes ". – tospig