我每天都会执行批量插入Cron工作。但是会丢失一些值,因此当我重新运行数据时,会将这些值添加到现有数据中,而不是进行更新。有没有办法只插入尚未插入的文档。
我的代码:
query = bigQuery.get_data(query)
bulk = col.initialize_unordered_bulk_op()
for i, row in enumerate(query):
bulk.insert({
'date': str(row['day_dt']),
'dt': datetime.strptime(str(row['day_dt']), '%Y-%m-%d'),
'site': row['site_nm'],
'val_counts': row[8]
})
bulk_result = bulk.execute()
现在,每次查询运行时,它都会重新插入所有值。有没有一种方法可以只添加尚未添加的值。
我显然不完全了解您的数据结构,也不清楚您要做什么,但是我认为应该这样做。
query = bigQuery.get_data(query)
new_things = []
for i, row in enumerate(query):
if not col.find_one(your_query): # make sure that the document does not exist already
# add data to an array
new_things.append({
'date': str(row['day_dt']),
'dt': datetime.strptime(str(row['day_dt']), '%Y-%m-%d'),
'site': row['site_nm'],
'val_counts': row[8]
})
# use insert_many to insert all the documents
bulk_result = col.insert_many(newthings)
检查代码旁边的注释以获取解释。如果您是您所说的菜鸟,我会坚持使用更简单的方法,并随着经验的增长来扩展代码。