gpt4 book ai didi

r - 使用 Rs mongolite 正确(插入?更新?)将数据添加到现有集合

转载 作者:IT老高 更新时间:2023-10-28 12:31:13 27 4
gpt4 key购买 nike

我有以下用 R 编写的函数(我认为)在更新我的 mongo 数据库集合方面做得很差。

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()

我的数据帧 myRdataframe1myRdataframe2 是非常大的数据帧,目前约 100K 行和约 50 列。每次我的脚本运行时,它:

  • 使用 con$find('{}') 将 mongodb 集合拉入 R,保存为数据帧 myRdataframe1
  • 从数据提供程序中抓取新数据,这些数据作为新行附加到 myRdataframe1
  • 使用con$remove()和con$insert完全删除mongodb集合中的数据,然后重新插入整个myRdataframe1

最后一个要点是不确定的,因为我每天在 cronjob 中运行这个 R 脚本,而且我不喜欢每次完全删除 mongo db 集合并将 R 数据帧重新插入到集合中。

如果我删除 con$remove() 行,我会收到一条错误消息,指出我有重复的 _id 键。看来我不能简单地使用 con$insert() 追加。

非常感谢您对此的任何想法!

最佳答案

当您尝试根据主键将已存在于数据库中的文档插入到 MongoDB 中时,您将遇到重复键异常。为了解决这个问题,您可以在 con$insert 之前使用类似这样的方法简单地取消设置 _id 列:

my.dataframes[i]$_id <- NULL

这样,新插入的文档会自动获得一个新的_id分配。

关于r - 使用 Rs mongolite 正确(插入?更新?)将数据添加到现有集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52673292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com