У меня есть следующая функция, написанная на R, которая (я думаю) выполняет плохую работу по обновлению моих коллекций баз данных Монго.
library(mongolite)
con <- mongolite::mongo(collection = "mongo_collection_1", db = 'mydb', url = 'myurl')
myRdataframe1 <- con$find(query = '{}', fields = '{}')
rm(con)
con <- mongolite::mongo(collection = "mongo_collection_2", db = 'mydb', url = 'myurl')
myRdataframe2 <- con$find(query = '{}', fields = '{}')
rm(con)
... code to update my dataframes (rbind additional rows onto each of them) ...
# write dataframes to database
write.dfs.to.mongodb.collections <- function() {
collections <- c("mongo_collection_1", "mongo_collection_2")
my.dataframes <- c("myRdataframe1", "myRdataframe2")
# loop dataframes, write colllections
for(i in 1:length(collections)) {
# connect and add data to this table
con <- mongo(collection = collections[i], db = 'mydb', url = 'myurl')
con$remove('{}')
con$insert(get(my.dataframes[i]))
con$count()
rm(con)
}
}
write.dfs.to.mongodb.collections()
Мои фреймы данных myRdataframe1
и myRdataframe2
- это очень большие фреймы данных, в настоящее время ~ 100K строк и ~ 50 столбцов.Каждый раз, когда запускается мой скрипт, он:
- использует con $ find ('{}'), чтобы вытащить коллекцию mongodb в R, сохраненную как фрейм данных
myRdataframe1
- данные от поставщика данных, которые добавляются как новые строки к
myRdataframe1
- , используют con $ remove () и con $ insert для полного удаления данных в коллекции mongodb, а затем повторного-вставить всю
myRdataframe1
Эта последняя точка пуля ненадежна, потому что я ежедневно запускаю этот скрипт R в cronjob, и мне это не нравится каждый раз, когда я полностью вытираю коллекцию mongo dbи повторно вставьте в коллекцию R-кадр данных.
Если я удалю строку con $ remove (), я получу сообщение об ошибке, в котором говорится, что у меня есть дубликаты ключей _id.Похоже, я не могу просто добавить, используя con $ insert ().
Любые мысли по этому поводу очень ценятся!