我目前有一个从API中提取数据的字典,我给每个数据点指定了它自己的变量(job_id、jobtitle、company等):
output = {
'ID': job_id,
'Title': jobtitle,
'Employer' : company,
'Employment type' : emptype,
'Fulltime' : tid,
'Deadline' : deadline,
'Link' : webpage
}
我想添加到我的数据库中,非常简单:
db.jobs.insert_one(output)
但这是一个for循环,它将创建30个独特的新文档,包括名称、标题、链接等等,这个脚本将运行不止一次,所以我希望它能做的只是在数据库中不存在的情况下,将“输出”作为文档插入,所有这些新文档都有自己的唯一ID,来自于作业ID变量,我能检查一下吗
编辑:
替换
db.jobs.insert_one(output)
与
db.jobs.replace_one({'ID': job_id}, output, upsert=True)
原始答案和工作示例:
将^{} 与
upsert=True
一起使用。您可以多次运行此操作,如果未找到ID
,则将使用insert;如果找到,则使用replace。这并不是您所要求的,因为数据总是更新的(因此更新的数据将覆盖任何现有数据)您需要尝试两件事:
1)做{}&;如果没有为给定的
job_id
找到文档,那么向DB写入是一个双向调用-相反,您可以在job_id
字段上有一个unique-index,如果您的操作试图插入重复文档,它将抛出一个错误(具有唯一索引是避免重复的更安全的方法,即使代码逻辑失败也很有帮助)2)如果您有30个dict,则无需重复30次&;使用
insert_one
进行30次数据库调用,您可以使用insert_many来接收dict&;写入数据库注意:默认情况下,所有dict都是按照它们在数组中的顺序写入的,如果一个dict因重复错误而失败,那么
insert_many
在该点失败而不插入其他dict,因此要克服这一点,您需要传递一个选项ordered=False
这样,除了重复的字典外,所有字典都将被插入相关问题 更多 >
编程相关推荐