批量插入,更新值mongodb

问题描述 投票:0回答:1

我每天都会执行批量插入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()

现在,每次查询运行时,它都会重新插入所有值。有没有一种方法可以只添加尚未添加的值。

python mongodb bulkinsert bulkupdate bulk-operations
1个回答
0
投票

我显然不完全了解您的数据结构,也不清楚您要做什么,但是我认为应该这样做。

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)

检查代码旁边的注释以获取解释。如果您是您所说的菜鸟,我会坚持使用更简单的方法,并随着经验的增长来扩展代码。

© www.soinside.com 2019 - 2024. All rights reserved.